TCP 프로토콜 < 위 포스팅과 연계되는 글
TCP프로토콜에서 사용되는 연결 방식
데이터 전송을 시작하기 전에 클라이언트와 서버 사이의 연결을 설정하는 과정

선행 지식
세그먼트에 포함되는 시퀀스 번호(SEQ)는 데이터의 시작점을 나타내는 값이며,
ACK 번호(ACK)는 다음에 수신할 데이터의 시작점
ex) SYN 플래그1, Seq=1000, ACK = 0
서버 -> 클라이언트: SYN/ACK 플래그 1, Seq=2000, Ack=1001
클라이언트 -> 서버: ACK 플래그1, Seq=1001, Ack=2001
이렇게 3-way handshake가 완료되면, 클라이언트와 서버가 연결된 것이다.
[클라이언트] Seq=1001, Ack = 2001, Data 376바이트 클라->서버
[서버] ACK=1377, Seq = 2001, Data 270바이트 서버 -> 클라
[클라이언트] Seq=1377, ACK = 2271 서버 전송
위와 같은 형식을 지니게 된다
이 Sequence Number가 예측 가능한 값으로 고정되어 있다면, 악의적인 공격자는 이를 이용하여 TCP 연결을 위조하거나 데이터를 변조할 수 있기에 임의로 선정한다.
TCP 프로토콜을 사용해 세션을 종료할 때 사용되는 절차

연결을 종료하려는 클라이언트가 FIN 패킷을 전송. 이 패킷은 클라이언트가 데이터 전송을 완료했음을 서버에게 알림
서버는 FIN 패킷을 수신하고, 클라이언트가 전송한 데이터를 처리
서버가 모든 데이터를 처리하면, ACK (Acknowledgment) 패킷을 보내 클라이언트가 FIN 패킷을 받았음을 알림
서버가 데이터 전송을 완료하면, 자신도 FIN 패킷을 전송.
이 패킷은 서버가 데이터 전송을 마쳤음을 클라이언트에게 알림
클라이언트는 서버가 보낸 FIN 패킷을 수신하고, ACK 패킷을 보내 서버에게 FIN 패킷을 받았음을 알림
3way handshake를 이용하면 SYN Flooding과 같은 디도스 문제가 발생할 수 있다
이에 대한 보안에 대해 더욱 공부해보는 시간을 가져야함을 느꼈다.