본문 바로가기
CS/Network

[네트워크] TCP(Transport Control Protocol)

by 테리는당근을좋아해 2020. 6. 24.

TCP(Transport Control Protocol)

- TCP는 전송계층에서 사용하는 프로토콜로 연결형 서비스

- 장치들 사이에 논리적인 접속을 성립하기 위해 연결을 설정해 신뢰성을 보장

- 연결을 설정/해제하는 과정 필요

 

1) 3-way-handshake

- TCP 통신에서 연결을 설정하는 과정

 

(1) Client -> Server : SYN

- 접속 요청 프로세스(Client)가 연결 요청 메시지 전송(SYN)

- 송신자가 최초로 데이터를 전송할 때 Sequence Number을 난수로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트 전송

 

(2) Server -> Client : SYN + ACK

- 접속 요청을 받은 프로세스(Server)가 요청을 수락했으며, 접속 요청 프로세스(Client)도 포트를 열어 달라는 메시지 전송(SYN + ACK)

- 수신자는 Acknowledgement Number 필드를 Sequence Numer + 1로 지정하고, SYN와 ACK 플래그 비트를 1로 설정한 세그먼트 전송

 

(3) Client -> Server : ACK

- 마지막으로 접속 요청 프로세스(Client)가 수락 확인을 보내 연결을 맺음(ACK)

- 전송할 데이터가 있으면 이 단계에서 데이터 전송 가능

 

2) 4-way-handshake

- TCP 통신에서 연결을 해제하는 과정

 

(1) Client -> Server : FIN 

- 프로세스(Client)가 연결을 종료하겠다는 FIN 플래그 전송

- 프로세스(Server)가 FIN 플래그로 응닫하기 전까지 연결을 유지

 

(2) Server -> Client : ACK

- 프로세스(Server)는 일단 확인 메시지를 보내고 전송하던 데이터를 이어서 계속 전송

- 프로세스(Server)는 Acknowledgement Number 필드를 Sequence Number + 1로 지정하고, ACK 플래그 비트를 1로 설정한 세그먼트 전송

- 프로세스(Server)는 전송할 데이터가 남아있다면 이어서 계속 전송

 

(3) Server -> Client : FIN

- 프로세스(Server)가 통신이 끝났으면 연결 종료 요청에 합의한다는 의미로 프로세스(Client)에 FIN 플래그를 1로 설정한 세그먼트 전송

 

(4) Client -> Server : ACK

- 프로세스(Client)는 확인했다는 의미로 ACK 전송

 

3) TCP 상태 전이도

 

! TCP의 연결 설정 과정과 연결 종료 과정이 차이나는 이유

- Client가 데이터 전송을 마쳤다고하더라도 Server는 아직 전송할 데이터가 남아있을 수 있음

- 일단 FIN에 대한 ACK 전송한 뒤, 데이터 전송을 마친 후 FIN를 전송하므로 한 단계를 더 거침

 

! 만약 Server에서 FIN 플래그를 전송하기 전에 전송한 패킷이 FIN 패킷보다 늦게 도착하는 상황이 발생하면?

- 이러한 현상에 대비해 Client는 Server로부터 FIN 플래그를 수신하더라도 일정시간 동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정을 거침(TIME_WAIT)

 

! 초기 Sequence Number인 ISN을 난수로 설정하는 이유

이전의 Connection의 순차적인 패킷으로 오해받는 상황을 방지하기 위해

 

 

TCP 오류제어

- 수신측에서 데이터의 오류를 판단하고 재전송 요청

 

1) 오류 검출(Error Detection)

(1) Checksum

- 손상 세그먼트 검사

- 손상된 세그먼트 발견 시 해당 세그먼트를 폐기

 

(2) Acknowledgement

- 정상 세그먼트 수신을 송신측에 통보

 

(3) Time out

- 송신측은 세그먼트 전송 시마다 timer를 설정

- Time-out 시에는 손상 혹은 손실로 간주하고 재전송

 

오류종류 Error Detection Error Recovery
데이터 손상 Checksum 재전송
데이터 분실 Sequence Number, timer 재전송
데이터 순서 바뀜 timer 재배치

 

2) 재전송 방식

https://dheldh77.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%98%A4%EB%A5%98-%EC%A0%9C%EC%96%B4

 

[네트워크] 오류 제어(Error Control)

오류제어 전송된 데이터의 오류를 검출/정정하는 기법 1) FEC(Forword Error Control) - 수신측에서 오류를 스스로 검출/정정할 수 있는 방법 - 송신 시 오류 복구를 위한 잉여 비트를 추가 (1) 해밍코드 -

dheldh77.tistory.com

 

 

TCP 흐름 제어

- 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법

 

1) Stop and Wait

- 매번 전송한 패킷에 대한 확인 응답을 받아야 다음 패킷을 전송

 

2) Sliding Window

- 수신측에서 설정한 Window size만큼 송신측에서 확인 응답없이 패킷을 전송해, 데이터흐름을 동적으로 조절

- 패킷에 대한 응답이 확인되는 대로 옆으로 window 사이즈만큼 다음 패킷의 데이터를 전송

 

 

TCP 혼잡 제어

- 송신측의 데이터 전송 속도와 네트워크의 데이터 처리속도의 차이를 해결하기 위한 기법

 

1) AIMD(Additive Increase / Muticative Decreas)

- 가산 증가 방식

- 패킷을 하나씩 늘려가며 window size 조절

- 패킷 전송해 실패하거나 일정 시간이 지나면 window size를 절반으로 감소

 

2) Slow Start

- 지수 증가 방식

- 패킷을 2배수로 증가시켜 window size 조절

 

3) Fast Retransmit(빠른 재전송)

- 패킷이 순서대로 도착하지 않았을 때, 순서대로 도착한 마지막 패킷의 다음 패킷에 대한 ACK 패킷을 실어보냄

- 송신측에서는 중복된 순번의 ACK 패킷을 확인한 후 해당 패킷을 재전송

 

4) Fast Recovery(빠른 회복)

- 혼잡이 감지될 경우 window size를 절반으로 줄이고 선형 증가하는 방식

'CS > Network' 카테고리의 다른 글

[네트워크] HTTP 요청/응답 헤더  (0) 2020.06.26
[네트워크] HTTP와 HTTPS  (0) 2020.06.24
[네트워크]TCP와 UDP  (0) 2020.06.24
[네트워크] TCP/IP  (0) 2020.06.24
[네트워크] OSI 7 계층  (0) 2020.06.24

댓글