TCP는 웹 브라우저가 서버와 연결할 때 신뢰성 있게 연결해주는 프로토콜이다. 신뢰성을 위해 흐름제어, 혼잡제어를 수행한다. 이러한 것을 제어하는 정보는 TCP프로토콜의 Header 부분에 포함되어있다.
또한 Header 를 제외한 TCP가 실을 수 있는 데이터 크기를 세그먼트(segment)라고 한다.
통신 전에 송신 측과 수신측이 잘 연결되었는지 서로 확인 후에 통신하게 되는데 3단계를 거치기 때문에 이 과정을 3way handshake라고 한다.
1. 먼저, 송신자가 수신자에게 SYN을 날려 통신이 가능한지 확인한다. 이 때 포트가 열려있어야 한다.
2. 이후 수신자가 송신자로부터 SYN을 받고 SYN/ACK를 보낸다. 여기서 ACK는 응답을 받았다는 의미이다.
3. 이후로 송신자가 수신자로부터 SYN/ACK를 받고 ACK를 보내 전송을 시작함을 알린다.
이 과정을 그림으로 표현하면 이렇다.
1. CLOSED
- 아직 연결 시도 전 상태
- TCP 포트가 닫힌 상태
2. LISTEN
- TCP 포트가 열려 있고 연결 요청을 대기하는 상태
3. SYN-SENT
- 송신자인 client가 수신자인 server 에게 SYN 패킷 전송
- 임의의 값 n을 함께 전송
4. SYN-RECEIVED
- 패킷을 받은 server는 요청을 수락하게 되면 SYN/ACK 패킷을 전송하여 응답
- SYN은 server의 임의의 값 m을 전송
- ACK는 server가 SYN를 받았다는 뜻으로 보내는데 이 때 받은 SYN에 +1를 해서 전달
5. ESTABLISHED(client)
- server로부터 SYN / ACK 응답을 받아 클라이언트에서 연결 수립상태로 전환
- 서버에게 SYN을 받았다는 뜻으로 수립 완료 패킷 전달
- 받은 SYN에 +1을 해서 전달
6. ESTABLISHED(server)
- client로부터 연결 되었다는ACK 패킷을 전달받아 서버에서도 연결 수립 상태로 전환
- server 와 client가 모두 Estalished 모드가 되면 데이터 송수신이 이루어짐
'CS > 네트워크' 카테고리의 다른 글
TCP/IP의 4계층 이해하기 (0) | 2024.05.31 |
---|---|
IP주소의 구조 (0) | 2024.04.23 |