TCP IP Illustrated .. ch 13. TCP Connection Mnagement

13.1 Introduction

TCP : unicast connection – oriented 프로토콜. 데이터를 보내기 전 연결이 확보되야 함.  TCP 의 서비스 모델은 바이트 스트림이다.
TCP 가 패킷 유실, 중복, IP 레이어의 에러 등을 모두 발견, 수정한다.
이런 연결 상태 때문에 UDP 보다 복잡.
연결 확보 중에, 여러 옵션 교환. 헤더는 40바이트의 옵션 공간을 갖음.

13.2 TCP Connection Establishment and Termination

3단계
> 셋업, 데이터 전송(established), teardown (closing)
클라.. 3 웨이 핸드 쉐이킹 시작. 초기 시퀀스 넘버를 교환하기 위해. (SYN segments for the c/s )

3 Segments for connection establishment (three-way handshake)
1 C > S 2 <
3 >
~~~ data transfer ~~~
closing >
<
<
>

Active open == Client  <–> Server == Passive open .. SYN 받는 쪽..
Cleared == Close == Terminate  종료 는 양쪽 어디서든 가능..  클라이언트가 요청하는 게 일반적.  웹 서버 같은 것은 서버가 요청 후 바로 닫음.
> 1 < Active closer 가 FIN 날림.
> 2 < Passive closer 가 Acking 으로 대답. 이때 어플은 상대방이 종료를 실행한 것을 인지. 보통 어플이 종료작업을 시작.
이때, 패시브가 다른 액티브가 되어 자신의 종료를 시작..
> 3 < 종료를 완수하기 위해 최종 세그먼트는 최종 FIN 에 대한 애크를 담고 있다. 이 ‘핀’ 이 안 오면 올때까지 재전송 된다.

Half-open state .. 전송이 한 방향으로만 되는 상태.. 드물다.
Half close .. 를 두번하면 다 끊는 것..

13.2.1 TCP Half-Close

흔한 일은 아님.   ” 난 다 보내서 FIN 날렸구, 받는 건 계속 할거야 ”  버클리 소켓은 지원.

13.2.2 Simultaneous Open and Close

짜고 하지 않는 한 드물지만.. 동시 접속은 가능하다.  Simul… Open,   …. Close ..

13.2.3 Initial Sequence Number (ISN)

예상하기 어려운 ISN 를 만들어 해킹? 방지.  semi random 방식으로 만든다.

13.2.4 Example

흔한 일은 아님.   ” 난 다 보내서 FIN 날렸구, 받는 건 계속 할거야 ”  버클리 소켓은 지원.

TCP IP Illustrated .. ch 3. Link Layer

3.1 Introduction  (physical layer + data link layer)

TCP/IP 가 사용하는 링크 레이어에 대해서만..

링크레이어 PDU.. 에 대해 말할 때 frame 을 쓴다.. 패킷 / 세그먼트와 구별하기 위해.

MTU maximum transmission unit :: 레인지의 상위 한계.  앞으로 자주 볼 링크 레이어의 성격.
모뎀, 시리얼 라인은 최대 프레임 사이즈가 없고.. 사용자에 의해 규정됨.

3.2 Ethernet and the IEEE 802 LAN/MAN Standards

1980, 1982 ; 초기 이더넷 “10 Mb/s Ethernet”  “shared Ethernet” 으로 불림.
그 후 IEEE 표준.
Station 이 있는 구성 ?..
100 Mb/s … 10 Gb/s … 100 Gb/s ..
90년대 꼬인 선 와이어링 .으로 교체.. 100 Mb/s ..

현재는 스위치가 사용되어 각각이 최대 속도 보장..
IEEE 802 Standards .   MAN standards .. 802.16..

3.2.1 The IEEE 802 LAN/MAN Standards

802.3z / 802.3ab :: 1000 Mb/s Ethernet. (Gigabit Ethernet)
802.3ae :: 10 Gb/s (Ten Gigabit Ethernet)

3.2.2 The Ethernet Frame Format

All Ethernet (802.3) 은 하나의 포맷에 기초한다.
Figure 3-3 :: IEEE “Packet” ..  Frame … MAC Client Data ..
이더넷 프레임은 Preamble.. 로 시작.  이더넷은 비동기 랜..  인코드 비트간 공간이 다름..

3.2.3 802.1 p/q: Virtual LANs and QoS Tagging

스위칭 이더넷이 많아지면서 동일 랜 상에서 모든 컴퓨터가 통신하는 것이 가능해짐.  이것의 장점은 어느 호스트 든 다른 호스트와 통신할 수 있다. (IP와 다른 네트워크-레이어 프로토콜을 갖고.. 관리자 컨피겨 불필요).. 부가적으로 브로드캐스트, 멀티캐스트 트래픽이 별다른 세팅없이 가능.
버츄얼 랜.. VLANs .. 802.1q..

3.2.4 802.AX: Link Aggregation (Formerly 802.3ad)

..

3.3 Full Duplex, Power Save, Autonegotiation, and 802.1X Flow Control

win 7 : control panel .. setting.

3.3.1 Duplex Mismatch

 

this is sample
int i = 0;

C# in Depth. Jon Skeet. ch. 1

Dynamic languages suck away fluff from your code, leaving just the essence … Right..

The interesting thing is that few of the features that tend to give dynamic lan- guages their lightweight feel have anything to do with being dynamic.

Statically typed languages don’t have to be clumsy and heavyweight.

C# 1 : Java 와 비슷.  추가적인 것 :: properties as a first-class feature in the language, delegates and events, foreach loops, using statements, explicit method overriding, operator overloading, and custom value types, to name a few

1.1 Starting with a simple data type

목적 :: impress rather than educate

1.1.1 The Product type in C# 1

using System.Collections;
public class Product
{

   string name;
   public string Name { get { return name; } } // getter 가 필요하면 정의해야 함 .. fluff ..

   decimal price;
   public decimal Price { get { return price; } }

   public Product(string name, decimal price)
   {
      this.name = name;
      this.price = price;
   }

   public static ArrayList GetSampleProducts()
   {
      ArrayList list = new ArrayList(); // 뭐가 들어가는 지 모른다.
      list.Add(new Product("West Side Story", 9.99m));
      list.Add(new Product("Assassins", 14.99m));
      list.Add(new Product("Frogs", 13.99m));
      list.Add(new Product("Sweeney Todd", 10.99m));
      return list;</pre>
}
public override string ToString()
 {
 return string.Format("{0}: {1}", name, price);
 }
}

1.1.2 Strongly typed collections in C# 2  __ generic ..

public class Product
{
   string name;
   public string Name
   {
      get { return name; }
      private set { name = value; } // ***
}
decimal price;
public decimal Price
{
      get { return price; }
      private set { price = value; }</pre>
}
public Product(string name, decimal price)
{
 Name = name;
 Price = price;
}

public static List GetSampleProducts() {
 List list = new List();
 // type 명시.. 리스트에서 가져올 때 캐스팅 필요 없음.
 list.Add(new Product("West Side Story", 9.99m));
 list.Add(new Product("Assassins", 14.99m));
 list.Add(new Product("Frogs", 13.99m));
 list.Add(new Product("Sweeney Todd", 10.99m));
 return list;
}
public override string ToString()
{
 return string.Format("{0}: {1}", name, price);
}
}

1.1.3 Automatically implemented properties in C# 3

using System.Collections.Generic;
class Product
{
  public string Name { get; private set; } // 코드, 변수도 없다. Name 은 함수명.
  public decimal Price { get; private set; }
  public Product(string name, decimal price)
  {
    Name = name;
    Price = price;
  }
  Product() {}
  public static List GetSampleProducts()
  {
    return new List
    {
      new Product { Name="West Side Story", Price = 9.99m },
      new Product { Name="Assassins", Price=14.99m },
      new Product { Name="Frogs", Price=13.99m },
      new Product { Name="Sweeney Todd", Price=10.99m}</pre>
 };
 }
 public override string ToString()
 {
 return string.Format("{0}: {1}", Name, Price); }
 }
}

1.1.4 Named arguments in C# 4

readonly decimal price;
public decimal Price { get { return price; } }
public Product(string name, decimal price)
{
  this.name = name;
  this.price = price;
}
new Product(name: "West Side Story", price: 9.99m);  // 이렇게 인수 이름을 붙여 초기화.

1.2 Sorting and filtering

1.2.1 Sorting products by name

ArrayList products = Product.GetSampleProducts(); // C# 1</pre>
List products = Product.GetSampleProducts(); // C# 2
List products = Product.GetSampleProducts(); // C# 3
products.Sort(delegate(Product x, Product y)
 { return x.Name.CompareTo(y.Name); }
);

1.2.2 Querying collections

List products = Product.GetSampleProducts();
Predicate test = delegate(Product p) { return p.Price > 10m; };
Listmatches = products.FindAll(test);
Action print = Console.WriteLine;  // method group conversion (C# 2)
matches.ForEach(print);
// Differently ...
List products = Product.GetSampleProducts();
products.FindAll(delegate(Product p) { return p.Price > 10;}) .ForEach(Console.WriteLine);  // 노이지 하다. { } 딜리깃.
// C# 3
List products = Product.GetSampleProducts();
foreach (Product product in products.Where(p => p.price > 10)) {
  Console.WriteLine(product);
}

1.3 Handling an absence of data

1.3.1 Representing an unknown price

Nullable
decimal? price;
public decimal? Price
{
  get { return price; }
  private set { prie = value; }
}
..
Price == null // 조건식..

1.3.2 Optional parameters and default values

public Product(string name, decimal? price = null)
{
  this.name = name;
  this.price = price;
}

1.4 Introducing LINQ

C# 3..

1.4.1 Query expressions and in-process queries

List products = Product.GetSampleProducts();
List suppliers = Supplier.GetSampleSuppliers();
var filtered = from p in products
               join s in suppliers
                   on p.SupplierID equals s.SupplierID
               where p.Price > 10
               orderby s.Name, p.Name
               select new { SupplierName = s.Name, ProductName = p.Name };
foreach (var v in filtered)
{
    Console.WriteLine("Supplier={0}; Product={1}",
                 v.SupplierName, v.ProductName);
}

1.4.2 Querying XML

1.4.3 LINQ to SQL

..

1.5 COM and dynamic typing

c# 4 : Com, DLR (Dynamic Language Runtime)

1.5.1 Simplifying COM interoperability

1.5.2 Interoperating with a dynamic language

ScriptEngine engine = Python.CreateEngine();
ScriptScope scope = engine.ExecuteFile("FindProducts.py");
dynamic products = scope.GetVariable("products");
foreach (dynamic product in products)
{
  Console.WriteLine("{0}: {1}", product.ProductName, product.Price);
  // 여기서 에러가 날지도 모르지만.. 어떻게든 진행함.
}

1.6 Dissecting the .NET platform

1.6.1 C#, the language

IL -> JIT compiler.

1.6.2 Runtime

런타임 부분은 IL 의 작은 부분..  CLI : Common Language Infrastructure, CLI 의 런타임은 CLR ( ~~ ~~ 런타임) 으로 불림..  이 책에서는 마소 의 구현을 가리킴.
언어의 일부는 런타임 레벨에 보이지 않지만, 다른 것들은 구분을 넘는다.  … 어레이와 딜리깃은 런타임에 중요.

1.6.3 Framework libraries

 

__