본문 바로가기

Basic IT/Network

TCP/IP

1. TCP
- 용어 정의: Transmission Control Protocol: 전송과정을 컨트롤한다.


1) Source Port: 패킷을 보내는 호스트가 사용하는 Port Number
2) Destination Port: 패킷의 목적지 Port Number
3) Sequence Number: TCP 세그먼트에 있는 데이터의 첫번째 바이트에 대한 순번.
4) Acknowldgement Number: 바이트에 대한 순번, 데이터 송신측의 연결된 다른 측 호스트에서 이 값을 받을 것을 기대함.(응답)
5) Offset: 현재 세그먼트 내의 데이터 위치.
6) Flags: 여러 제어 명령들을 나타냄.
7) Reserved: 장래의 사용을 위해 예약된 필드
8) Window: TCP 세그먼트를 보내는 호스트의 현재 TCP 버퍼 크기(최대 65,535Byte)
9) Cheksum: TCP 데이터와 TCP 해더의 정확성을 확인.
10) Urgent Pointer: Ugent Data(긴급히 처리되어야할 Data)에 대한 위치 정보(1인경우만 유효함.)
11)  Options:32bit size를 맞추기 위한 Padding Field 제공.

2, TCP Connection Establishment and Termination
2.1 TCP Connection이 이루어 지는 과정
TCP 연결 설립은 기본적으로 3Way handshaking에 의해 connection이 연결된다.


1) Client에서 Listen상태의 서버에 connection을 요청하기 위해, SYN message를 전송하고, Client는 SYN_SENT 상태로 들어간다.
2) Server는 Client로 부터 요청을 받으면, 그 요청에 대한 ack와 함께 SYN signal을 보내고 SYN_RCVD 상태로 들어간다.
3) Client는 서버로 부터 SYN에 대한 ack를 받으면 Connection이 생성되고 Establesed 상태가 되고 서버로 부터 받은 SYN에 대한 ack signal을 서버에 전송한다.
4) Server는 Client로 부터 ack를 받으면 Established상태로 들어가고 Client와 Server 사이에 Connection이 생성된다.

2.2. TCP Connection Close
TCP Connection은 기본적으로 Full Duplex Connection으로 생성된다. 즉, Client에서 Server로 보내지는 Connection과 Server에서 Client로 Data를 전송하는 Connection이 서로 다르다. 때문에, 각 Connection들은 independent하게 close를 해야 하는데, 이런 TCP의 특성을 사용하여 한쪽 Connection만 닫은 상태(TCP half-close)로 통신을 하는 방법도 Application에서 사용하는 경우가 있다.
TCP에서 Connection을 close하는 과정을 살펴 보자.

1) 우선 Client에서 close 명령을 호출해서 Server에 FIN을 보내고, Client는 FIN_WAIT_1 상태로 들어가고, FIN에 대한 ack를 대기한다.
* FIN은 더이상 보낼 데이터가 없다는 것을 의미.
2) Server에서는 FIN을 받으면, FIN에 대한 ack를 Client에 보내고 CLOSE_WAIT상태가 된다. 이후, Server Application에서 close를 수행하기를 대기한다.
3) Client에서는 FIN에 대한 ack를 받으면 FIN_WAIT_2상태가 되고, Server에서 close를 수행하기를 대기한다.
4) Server에서는 Client에 ack를 보낸후에, Application에서 socket을 close명령을 이용하여 close한다. close명령은 client에 FIN signal을 전송한다. 이후, Server는 LAST_ACK 상태가 된다.
5) Client는 Server로 부터 close에 대한 FIN을 받으면 Server에 ack signal을 전송하고 TIME_WAIT 상태로 들어간다. OS의 TCP 정의에 따라 TIME_WAIT 상태동안 대기후, Client에서는 socket을 close하고 Connection이 종료된다. 이 TIME_WAIT 시간은 /dev/tcp의 tcp_timeout_wait_interval(ex: solaris)의 값을 변경할 수 있다.
6) Server에서는 4)에서 client에 전송한 FIN에 대한 ack signal을 받으면 바로 connection이 종료된다.

'Basic IT > Network' 카테고리의 다른 글

NFS V4  (0) 2011.10.12
나글스 알고리즘.  (0) 2011.07.21
DNS  (0) 2010.04.14