티스토리 뷰
TCP와 UDP
TCP
- Client(Active하게 연결을 하는 주체)와 Server(기다리다 연결을 받는 주체)로 구성되어 있다.
- 서버는 누군가가 서버에 연결을 할 것이기 때문에 연결을 대기(Listen)하고 있다.
- Client측의 Process가 Socket을 Open한다. 이 때, Process가 자신의 식별자인 PID를 갖는데 PID를 갖는 어떤 Client Process가 Socket을 열면 운영체제 입장에서 Socket에 TCP Port번호를 부여한다.
- 통신을 하기 위해서는 IP주소와 Port번호를 알아야 연결이라는 것을 시도해 볼 수 있다.
요약
- TCP에만 연결(Connection, Session) 개념이 있다.
- 연결이라는 것은 논리적(Virtual)이기 때문에 Virtual Circuit 이라는 용어로도 번역된다.
- 연결은 결과적으로 순서번호로 구현된다.
- Bytes 수만큼 증가하게 되어있다.
- 연결은 상태(전이) 개념을 동반한다.
- 누군가와 전화를 한다는 상황을 가정했을 때, 통화 하기 전의 상태와 연결이 이루어지고 나서 통화를 하는 상태를 생각해 볼 수 있다.
- TCP는 배려가 있는, UDP는 배려가 없는 사람에 비유할 수 있다.
- TCP는 수신하는 측에서 여유공간이 없다면 데이터를 송신하지 않는다.(Zero Window)
- UDP는 수신하는 측이 어떤 상태이든 관심이 없다. 그저 보낼 뿐이다.
TCP 연결 과정(3-way handshaking)
- Sequence 번호 + 정책(MSS, Maximum Segment Size)을 교환하는 과정이다.
- MSS는 Segment의 최대 크기를 이야기한다.
- Client와 Server가 있는데 Client가 연결 시도를 할 때, '내 MSS는 1460이야' 라고 정책을 함께 동반하여 보내면 Server측에서도 '내 MSS도 1460이야'라고 응답을 보낸다. 그러면 Client측에서는 아 그러면 어느정도 크기로 데이터를 보내면 되겠구나를 판단하여 데이터를 보내게 된다.
- 만약 Client의 MSS는 1460인데 Server의 MSS는 1400이라면 Client는 Server의 MSS에 맞춰서 데이터를 보내는 것이다.
- Client 연결 상태 흐름
- SYN_SENT -> ESTABLISHED
- Server 연결 상태 흐름
- LISTEN -> SYN_RCVD -> ESTABLISHED
TCP 연결 종료 과정(4-way handsdhaking)
- Client가 Active한 주체가 된다. 따라서 연결을 시도하는 것도, 연결을 종료하는 것도 Client이다.
- 연결 종료는 연결이 되어있음(ESTABLISHED 상태)을 가정해야한다. 그래야 종료할 연결이 생기기 때문이다.
- 연결 종료시 Client는 서버에
FIN + ACK
를 보낸다. 이때 Server의 어떤 응답을 받을 때까지 Client는FIN_WAIT1
상태가 된다. - 이 신호를 받은 Server는 Client에 수신을 받았다는 의미로
ACK
를 보내며 상태는CLOSE_WAIT
가 된다. FIN_WAIT1
상태이던 Client는 Server의ACK
신호를 받고FIN_WAIT2
상태가 된다.- 연결을 끊으려는 측에서
FIN + ACK
를 보내고, 받은 측이ACK
를 보내는 이 과정이 한 세트가 되며, 이 과정에 총 2회 일어난다. 그래서 이름도 4-way handshaking이다. - 두번째 연결을 끊는 과정에서는 Server측에서 먼저
FIN_ACK
신호를 Client측에 보내면서 상태는LAST_ACK
가 된다. - Server의
FIN_ACK
신호를 받은 Client는 다시 Server측에ACK
신호를 보내면서TIME_WAIT
상태가 된다.- TIME_WAIT 상태는 주목할 필요가 있다.
- 이 상태가 났다라는 것이 의미하는바는
연결을 끊자
라는 상태가 발생하는 것으로 연결을 최종적으로 끊기 전에 발생하는 상태이다. - 이 상황의 경우 Client측에서 먼저 연결을 끊자고 하였으니 Client측에서
TIME_WAIT
상태가 발생했다. 만약 Server에서TIME_WAIT
상태가 발생했다면, 이는 Application protocol상에 정상적이지 않은 문제가 발생했다는 뜻으로 해석할 수 있다.
- Client는 마지막
ACK
를 보내고CLOSED
상태가 되며, Server는ACK
를 받고CLOSED
상태가 된다.- Client는 마지막
ACK
를 보내고 일정시간이 지나면 자동으로CLOSED
상태가 되면서 Socket이 회수가 된다.
- Client는 마지막
연결 과정과 연결 종료 과정을 하나의 그림으로 이해하면 아래의 그림과 같다. 아래 그림에서 파란색 선은 서버를 나타내고, 빨간색 선은 클라이언트를 나타낸다. 연결 종료시 클라이언트는 Active하며 서버는 Passive함에 주목해야한다.
'Computer science > 네트워크' 카테고리의 다른 글
DNS (0) | 2022.10.28 |
---|---|
L4 - 2. TCP, UDP 헤더 형식, TCP연결이라는 착각 (0) | 2022.10.27 |
L3 - 4. TTL과 단편화, DHCP, ARP, Ping과 RTT (0) | 2022.10.25 |
L3 - 3. IP 헤더 형식, 서브넷 마스크와 CIDR, Brodcast IP 주소, Host 자신을 가르키는 IP 주소 (0) | 2022.10.24 |
L3 - 2. TCP/IP 송수신 구조 (0) | 2022.10.23 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 빅데이터를지탱하는기술
- Algorithm
- 프로그래머스
- logstash
- CSAPP
- 네트워크
- cka
- DFS
- sqoop
- Python
- GROK
- CS
- Elasticsearch
- Hadoop
- 빅데이터
- kafka
- 이코테
- 백준
- Espher
- DP
- 파이썬
- OS
- kubernetes
- HDFS
- BOJ
- mahout
- oozie
- heapq
- elasticsaerch
- Flutter
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함