TCP(Transfer Control Protocol) | |
16bit source port, 16bit destination port: 출발지와 도착지의 서비스포트 번호. TCP의 다중화를 지원해주는 부분이다. 하나의 IP를 가진 호스트에서 여러 개의 포트를 사용하여 복수 개의 서비스가 가능하도록 함.
32bit sequence number: 처음 연결을 시도할 때 시스템에서 임의로 생성한다. 이 값은 전송량을 내포하고 있으며, 받은 쪽에서 이 값을 이용하여 재조립을 한다. 이 값과 더불어 32bit acknowledgement number 값의 계산과정, 패킷 전송시와 재조립시에 사용한다.
4bit header length: TCP헤더의 길이 값을 말한다. 기본적인 값은 20이다. 옵션이 사용될 경우 값의 크기는 변경된다. 옵션의 값은 반드시 32비트씩 사용되어야 한다. 만약 맞지 않을 경우 Padding이라 하여 0으로 그 값을 채워야 한다.
reserved 6bit: 현재 사용되지 않으며, 예약되어 있는 비트이다. 일반적으로 개발자들이 특벼한 용도의 값이나, 설정용으로 사용되기도 한다.
URG플래그: 긴급상황이 발생했을 경우 사용하는 플래그이다. 데이터를 전송하는 중간에 [ctrl+c]를 눌러서 취소하고 싶다고 가정하자. 현재 보내는 컴퓨터의 데이터를 전송하기 위해서 버퍼에 데이터를 넣고 있다고 하자. 버퍼는 모두 채워지지 않으면 데이터가 전송되지 않는다. 이때 취소버튼을 눌렀다면, 긴급하게 데이터는 전송되어야 한다. 그래서 보낼 데이터에 URG 플래그를 설정하고, 데이터를 바로 전송하기 위해서 PSH플래그도 같이 설정한다. 버퍼에 데이터가 차지 않으면 모두 찰 때까지 기다리게 되는데, PSH플래그가 설정되면 그 즉시 데이터를 전송하게 된다. 받는쪽에서는 데이터를 받았을때 URG패킷이 설정되어 있다면, 16-Urgent Pointer 값을 확인한다. 이 값은 긴급하게 처리할 정보가 있는 위치를 가리키는 포인터 값이다. 만약 이 값이 없다면 들어온 데이터를 하나씩 모두 처리한 후에 처리되므로, 불필요한 작업을 수행하게 된다. 이런 작업을 모두 제거하기 위해서 이 포인터 값이 필요하다.
ACK플래그: 데이터 전송시에 자주 보이는 플래그이다. 데이터가 제대로 전송되었다고 알려주는 패킷이다. TCP는 데이터를 전송하기 위해서 connection을 만드는 과정을 거치고, 안전한 데이터 전송을 위해서 데이터 전송 후 수신 확인 과정을 거친다. 만약 데이터를 전송하는 과정에서 ACK플래그를 받지 못하면 일정시간동안 기다리다 데이터를 재전송하게 된다. 즉 데이터가 제대로 도달하지 못했다고 판단하고 재전송을 하게 되는 것이다. 예를들어 DATA가 보내어졌다면 받은쪽에서는 ACK가 와야하지만 오지 않을 경우 못받았다고 생각하고 다시 DATA를 보낸다. 이런방식을 PAR(Positive Acknowledgement with Re-transmission)이라고 부른다.
PSH플래그: 위에서 설명했듯이 버퍼가 다 차지 않았더라도 이 플래그가 1이되면 바로 보낸다.
RST플래그: 재설정을 요구하는 플래그이다. RESET이라고 생각하자. 만약 세션을 연결하지 않았거나, 이상한 패킷이 도착되면 잘못 전송하였다고 알려주기 위해서 이 플래그를 설정하여 패킷을 전송하기도 한다.
SYN플래그: TCP의 특징 중 하나인 연결지향성을 나타내는 대표적인 플래그이다. TCP는 데이터 전송이 이루어지기 전에 세션을 생성하기 위해서 반드시 3-Way handshaking과정을 거친다. 이과정은 상대방에 대한 확인 과정이며, 데이터를 주고받기 위한 초기화 과정이기도 하다. SYN플래그는 이 과정을 하자고 제의하는 플래그이다. 만약 이 플래그를 받았고 문제가 없다면 SYN/ACK플래그를 상대방에게 전송해 준다. SYN/ACK플래그를 받으면 잘 받았다고 알리기 위해서 ACK플래그를 설정한 패킷을 전송하게 된다.
FIN플래그: 세션을 종료하고자 할 때 사용하는 플래그이다. 모든 과정이 완료되면 종료하겠다고 FIN플래그를 설정한 패킷을 전송하게 된다. 잘 받았으며 우리도 종료할 준비를 하겠다는 뜻으로 FIN/ACK플래그를 전송하게 된다. 이 패킷을 수신하면 수신했다는 ACK플래그를 설정한 패킷을 전송한 후에 자체 종료를 시작하게 된다. | |
TCP 3 Hand shake | |
| |
TCP Connection Flow (close 매커니즘) | |
버퍼에 데이터가 차지 않으면 모두 찰 때까지 기다리게 되는데, PSH플래그가 설정되면 그 즉시 데이터를 전송하게 된다. close 하기전, PSH 비트를 셋하여 즉시 데이터를 전송하도록함.
종료하겠다는 FIN 플래그를 설정한 패킷을 전송함.
FIN bit를 잘 받았다는 신호를 보냄
우리도 종료할 준비를 하겠다는 뜻으로 FIN/ACK플래그를 전송함.
패킷을 잘 수신했다는 ACK플래그를 설정한 패킷을 전송한 후에 자체 종료를 시작하게 됨.
| |
'TCPIP' 카테고리의 다른 글
2013.07.03_UDP_기타이론설명By종영이형 (0) | 2013.07.04 |
---|---|
2013.07.02_sigaction() 함수. (0) | 2013.07.02 |
2013.06.27_Packet_Analyze_ (0) | 2013.06.27 |
2013.06.26_IP헤더구조_ (0) | 2013.06.26 |
2013.06.24_TCP/IP이론_ (0) | 2013.06.24 |