IP
에 의해 전달되는 패킷의 오류를 검사
하고 재전송 요구
등의 제어를 담당
하는 계층신뢰성
있는 데이터 전송
을 담당하는 계층신뢰성
: 데이터를 순차적, 안정적인 전달전송
: 포트 번호에 해당하는 프로세스에 데이터를 전달흐름문제(Flow)
: 송수신자 간의 데이터 처리 속도 차이. 수신자가 처리할 수 있는 데이터 양을 초과혼잡문제(Congestion)
: 네트워크의 데이터 처리 속도. 네트워크가 혼잡할 때 ex) 라우터신뢰성
있는 데이터 통신을 가능하게 해주는 프로토콜3-way handshaking
과정을 통해 연결을 설정4-way handshaking
을 통해 연결 해제윈도우크기(Window Size)
값을 통해 수신량을 정할 수 있음Dupack-based retransmission
정상적인 상황에서는 ACK 값이 연속적으로 전송
ACK값이 중복으로 올 경우 패킷 이상을 감지하고 재전송을 요청
Timeout-based retransmission
일정시간동안 ACK 값이 수신을 못할 경우 재전송을 요청
전이중 (Full-Duplex)
: 전송이 양방향으로 동시에 일어날 수 있음점대점 (Point to Point)
: 각 연결이 정확히 2개의 종단점을 가지고 있음
세그먼트(Segment) - TCP 프로토콜의 PDU
- 데이터 단위
- Data -> TCP HEADER + Data 여러개로 분리
SYN
을 보내고 SYN_SENT
상태로 대기SYN_RCVD
상태로 바꾸고 SYN
과 응답 ACK
를 보냄SYN
과 응답 ACK
을 받은 클라이언트는 ESTABLISHED
상태로 변경하고 서버에게 응답 ACK
를 보냄FIN
을 보내고 FIN_WAIT1 상태
로 대기CLOSE_WAIT
으로 바꾸고 응답 ACK
를 전달. 동시에 해당 포트에 연결되어 있는 어플리케이션에게 close()를 요청ACK
를 받은 클라이언트는 상태를 FIN_WAIT2
로 변경FIN
을 클라이언트에 보내 LAST_ACK
상태로 바꿈FIN
을 받은 클라이언트는 ACK
를 서버에 다시 전송하고 TIME_WAIT
으로 상태를 바꿈. TIME_WAIT
에서 일정 시간이 지나면 CLOSED
됨. ACK
를 받은 서버도 포트를 CLOSED
로 닫음💡간단요약
1. 데이터를 전부 송신한 client가 FIN 송신
2. 서버에서 ACK 송신
3. 서버에서 남은 패킷 송신 (일정 시간 대기)
4. 서버가 FIN 송신
5. 클라이언트가 ACK 송신
❗TCP 문제점
- 신뢰성은 보장하지만 매번
CONNECTION
연결로 시간 손실 발생- 패킷을 조금만 손실해도 재전송
전송 속도가 빠른
프로토콜User Datagram - UDP 프로토콜의 PDU
Data -> UDP HEADER + Data (데이터를 쪼개지 않음)
[출처]