TCP 송,수신 과정

2018. 10. 16. 06:30보안 & 해킹/Network

TCP 3way handshake, 4way handshake, 소켓의 상태 천이, 상태 플래그, seq, ack 계산 한방 정리







seq : 패킷의 고유 넘버, 랜덤값으로 초기화

ack : 내가 다음에 받을 패킷 넘버. seq + 1 , seq + data length

 

 

Client seq 는 1000, Server 는 2000 이라고 가정

 

 


 


 



MSL ( Maximum Segment Lifetime ) X 2 만큼의 시간 동안 TIME_WAIT 상태를 유지한다.


TIME_WAIT이 없다면 서버측에서 마지막에 받아야할 ACK를 받지 못했을 경우 TCP Retransmission을 계속 반복 시도할 것이다.











Ref)

1. TCP TIME_WAIT

http://docs.likejazz.com/time-wait/




RFC 793 에는 TIME_WAIT을 2 MSL로 규정했으며 CentOS 6에서는 60초 동안 유지된다. 아울러 이 값은 조정할 수 없다.

 

틀린 정보

net.ipv4.tcp_fin_timeout을 설정하면 TIME_WAIT 타임아웃을 변경할 수 있다.

 

TIME_WAIT의 타임아웃 정보는 커널 헤더 include/net/tcp.h 에 하드 코딩 되어 있으며 변경이 불가능하다.

 

https://github.com/torvalds/linux/blob/master/include/net/tcp.h#L120


// include/net/tcp.h
#define TCP_TIMEWAIT_LEN (60*HZ)
/* how long to wait to destroy TIME-WAIT
                                  * state, about 60 seconds     */




2. 로컬 포트 부족과 TIME_WAIT

https://www.popit.kr/%EB%A1%9C%EC%BB%AC-%ED%8F%AC%ED%8A%B8-%EB%B6%80%EC%A1%B1%EA%B3%BC-time-wait/



3. 커널이 로컬 포트를 선택하는 과정