728x90
TCP와 UDP
- TCP에만 연결(Connection, Session) 개념이 있다.
- 연결은 결과적으로 순서번호로 구현된다.
- 연결은 상태(전이) 개념을 동반한다.
- TCP는 배려남, UDP는 배려가 없는 나쁜 남자에 비유할 수 있다.

- TCP, UDP에서 사용하는 데이터 단위는 Segment,Datagram이다.
- TCP는 수신측에서 항상 연결대기를 하고 있다.
- 프로세스가 OS에 특정 포트의 Socket을 사용한다고 요청하고, 이를 허용하게 되면 Socket이 열리고 그때부터 통신이 가능하다.
- 만약 허용되지 않은 Socket으로 요청이 오면, 운영체제 수준에서 연결을 못받아준다는 응답이 간다.
TCP 연결 과정

- 3 way Handshaking 과정에서 사용되는 데이터 단위는 Segment이다.
- 이 과정에서 사용되는 데이터는 Payload가 없이 IP/TCP 만 전달된다.
- 과정 순서
- Syn 과정에서 랜덤하게 뽑은 Sequence 번호를 Server에 전달한다.
- Server도 랜덤하게 뽑은 Sequence 번호와 Client에게 전달받은 Sequence번호 + 1 값을 Client에 응답한다.
- 다시 Client는 Server에게 전달받은 Sequence번호를 +1하여 Server에 전달한다.
- Client는 Sync응답을 받았을 때, Established 상태가 되는데, 서버는 이 때, ACK 요청을 받지 못하기 때문에 Established 상태가 아니다.
- ACK 요청을 받고 난 후, Server는 Established 상태가 된다.
- 3-way-handshake는 쉽게 정책을 교환하는 것인데, Sequence, MSS(Maxium Segment Size) 등 값을 교환한다.
- 해당 Size에 맞춰서 Client가 Segment를 전달한다.
TCP 연결 종료 과정


- 마지막 ACK를 보낸 뒤, TimeWait -> Close가 되면 Socket 자원이 회수가 되는 것이다.
- Server Application이 연결을 끊는게 아니라, Client에게 연결 끊기도록 유도를 해야지만 Time_Wating상태를 줄일 수 있다.
- Active close: TCP 연결 해제 요청한 쪽, 그러니까 트래픽을 전송(request)하고 정상적으로 전송 되었으면 연결을 끊는 쪽
- Passive close: TCP 연결 해제 요청을 받은 쪽, 트래픽을 받는 쪽(api 서버라고 치면 클라이언트에게 응답을 주는 쪽)
TCP, UDP Header 형식
TCP Header 형식

- Sequence Number는 Data가 전달이 되다고 하면 해당 Byte 만큼 Sequence Number가 증가한다.
- Data 크기가 100 Byte면, Sequence Number + 100 값 전달
- Flag는 TCP의 상태를 알려준다.
- Window Size는 여분의 크기이다.
- 네트워크 속도가 처리속도를 역전해 버린 경우 Zero Window가 발생하고, 이는 프로그램에서 문제를 해결해야한다.
UDP Header 형식

- 혼잡 제어를 하지 않고 그냥 전달한다.
- 영상 송출 서비스 같이 여러 클라이언트가 스트림 데이터를 전달받을 때, 하향 편준화해서 데이터를 받을 필요가 없다.(UDP 사용)
- 게임 서버 같은 경우 UDP 프로토콜을 사용하며, TCP 혼잡제어 로직을 직접 구현한다.
- TCP 프로토콜을 사용해서 모든 데이터를 안전하게 받는것 보다, 사용자가 데이터가 조금 사라지더라도 유연하게 게임을 이용하는것이 더 중요하기 때문
728x90
'네트워크 > 네트워크 핵심이론 - 기초' 카테고리의 다른 글
| Ch03. L3 수준에서 외울 것들 - IP (0) | 2024.10.15 |
|---|---|
| Ch03. L3 수준에서 외울 것들 - 캡슐화와 패킷 (0) | 2024.10.09 |
| Ch02. L2 수준에서 외울 것들 (0) | 2024.10.02 |
| Ch01. Internet 기반 네트워크 입문 (0) | 2024.10.02 |