TCP와 UDP는 전송 계층에서 사용하는 대표적인 프로토콜이다.
TCP란
전송계층에 해당하는 네트워크 프로토콜로, 연결형 서비스를 지원하고 데이터의 신뢰성을 보장한다.
- 송신부와 수신부의 연결을 확인하는 연결형 서비스다
- 패킷 교환 방식은 패킷이 전달되는 회선이 정해져 있는 가상 회선 방식이다.
- 패킷의 전송 순서가 보장된다
- 패킷의 수신 여부를 확인한다
- 송신부와 수신부는 1:1 통신을 한다
- 데이터 손실이 없음을 보장하므로 신뢰성이 높다
- 데이터의 송수신 속도가 느리다.
*패킷 교환 방식 : 가장 많이 사용하는 데이터 통신방식
1. 가상 회선 방식: 데이터를 주고받기 전에 패킷을 전송할 경로인 가상 회선을 설정해서 모든 패킷을 같은 경로로 전송한다.
2. 데이터그램 방식: 패킷마다 최적의 경로로 전송되는 방시으로, 송신부에서 보낸 패킷의 순서와 수신부에 도착하는 패킷의 순서가 다를 수 있다.
TCP 핸드셰이킹
TCP에서는 연결형 서비스를 지원하기 위해 송신부와 수신부를 연결하는 과정을 거친다.
연결 시작할 때는 : 3-way 핸드셰이킹
연결을 종료할 때는 : 4-way 핸드셰이킹을 한다.
핸드 셰이킹 과정에서는 송신부와 수신부 간 연결을 제어 및 관리하도록 flag 값을 주고 받는다.
- SYN: Synchronization(동기화)의 약자, 연결을 생성할 때 사용
- FIN: Finish, 연결을 끊을 때 사용
- ACK: Acknowledgment(승인), 데이커를 전송하면 수신자가 받았음을 알려 줄 때 사용
- RST: Rest(초기화), 연결을 재설정할 때 사용
- PSH: Push, 빠른 응답이 필요한 데이터를 응용 계층으로 즉시 전송할 때 사용
- URG: Urgent, 다른 데이터보다 우선순위가 높은 데이터를 전송할 때 사용
[3-way 핸드셰이킹]
데이터를 본격적으로 주고 받기 전, 상대방 컴퓨터와 세션을 수립하는 과정으로 송수신자 모두 데이터를 주고 받을 준비가 되었음을 보장.
1. 송신부 - > 수신부 : SYN(N)
2. 수신부 -> 송신부 : ACK(N+1) + SYN(M)
3. 송신부 -> 수신부 : ACK(M+1)
*임의의 숫자: N, M
[4-way 핸드셰이킹]
TCP 연결을 해제할 때 이뤄지는 과정
1. 송신부 >> 수신부 : FIN
2. 수신부 >> 송신부 : ACK
3. 수신부 >> 송신부 : FIN
4. 송신부 >>> 수신부 : ACK
***
세션이 연결되면 일정 시간이 경과한 후 TCP Keep Alive 패킷을 던져 연결 유지 상태를 확인할 수 있다. 연결을 유지하길 원하는 쪽에서 보내며, 패킷에 대한 응답을 받으면 시간을 처음부터 다시 측정하고, 응답을 못 받으면 연결을 종료한다. 동일한 송수신부로부터 재요청이 오는 경우 불필요한 3way 핸드셰이킹을 줄일 수 있고, 불필요한 연결(좀비 커넥션)을 방지할 수 있다.
TCP 제어 방법
TCP의 데이터 신뢰성을 보장하기 위한 제어 방법으로 흐름 제어, 혼잡 제어, 오류 제어가 있다.
흐름제어: 데이터 송수신부와 수신부에서 데이터 처리 속도의 차이 때문에 생기는 데이터 손실을 방지하는 방법
혼잡제어: 송신부의 데이터 전달 속도와 네트워크 속도 차이로 데이터 손실이 발생하는 것을 방지하기 위한 방법
(혼잡: 네트워크에 패킷 수가 과도하게 증가하는 증상, 쌓여서 일정 시간 응답을 못 받으면 패킷 재전송하여 악순환 야기)
오류제어: 데이터에 오류 또는 유실이 발생할 때 데이터의 신뢰성을 보장하기 위해 오류를 제어하는 방식
UDP
User Datagram Protocl 사용자 데이터그램 프로토콜
전송 계층에 해당하는 네트워크 프로토콜로 송신부와 수신부 간 연결을 지원하지 않고 데이터그램 형태의 통신을 지원한다.
TCP의 3way 같은 과정없이 패킷을 바로 송수신 하는데, 신뢰성이 낮지만 속도가 빠르다.
- 송신부와 수신부의 연결이 보장되지 않는 비연결형 서비스다.
- 패킷이 서롣 다른 회선으로 교환될 수 있는 데이터그램 패킷 교환 방식이다.
- 송신부에서 전달한 패킷 순서와 수신부에서 받은 패킷 순서가 다를 수 있다.
- 패킷의 수신 여부를 확인하지 않는다.
- 1:1 통신, 1:N, N:N 통신 모두 가능하다
- 데이터의 신뢰성이 낮다.
- 데이터의 전송 속도가 빠르다.
UDP의 오류 검출
최소한의 신뢰성을 보장하기 위해 체크섬 방식으로 오류를 검출할 수 있다.
체크섬을 만들기 위해 데이터를 모두 더하고 오버플로되는 캐리가 발생하면 해당 캐리를 떼서 데이터에 다시 더한 후 1의 보수를 취해 체크섬을 만든다.
UDP송신부는 UDP의 헤더, IP 헤더의 일부 정보(발신 IP주소, 수신 IP 주소, 프로토콜 ID등)와 데이터로 체크섬 값 생성.
이때 생성한 체크섬 값을 UDP 헤더의 체크섬 영역에 넣어 수신부에 보내고, 수신부는 체크섬을 포함한 모든 값을 더해 비트가 1이 나오는지 확인하고, 1이라는 건 송시부와 동일한 체크섬 값이 나온다는 뜻임. ...
100%오류 검출은 아니며, 선택사항이므로 송신부에서 0으로 체크섬 값을 보내면 수신부는 계산하지 않음.
*캐리: 2진수의 덧셈 연산 시 자릿수가 넘어가는 것
*1의 보수: 각 자릿수의 값이 모두 1인 수에서 주어진 2진수를 빼면 나오는 수. 0101의 1의 보수 : 1010
'CS' 카테고리의 다른 글
2.4 REST (0) | 2023.12.04 |
---|---|
2.3 HTTP / HTTPS (0) | 2023.12.01 |
2.1 네트워크 계층 (1) | 2023.11.28 |
1. 운영체제 질문 (0) | 2023.11.25 |
1. 운영체제 정리 (1) | 2023.11.25 |