OSI계층에서 4번쨰 계층으로 데이터를 신뢰성 있게 주고 받게 해주는 역할을 합니다. TCP/UDP와 같은 프로토콜이 이 계층에서 작동하여, 데이터를 전송, 전달할 때 데이터가 손실 없이 도착하도록 합니다.
TCP
연결형 통신 프로토콜로 신뢰할 수 있고 정확한 데이터를 목적지에 문제 없이 전달하는 통신 방법입니다.
먼저 송신자와 수신자를 연결을 설정하고 데이터를 주고 받습니다.
데이터 전송의 신뢰성/정확성정확성을 보장하며, 패킷이 순서대로 도착하지 않거나 손실되었을 경우 재전송하는 기능이 있습니다.
전송이 양방향으로 동시에 일어나는 전이중 방식입니다.
2개의 종단점을 가지는 점대점 방식입니다. 두 컴퓨터를 직접 연결하는 방식으로 포트에 제약을 받으며, 케이블의 비용이 많이 듭니다.
위키백과 이중통신
세그먼트
TCP로 데이터를 전송할 때, 상위 계층에서 받아온 데이터에 붙이는 헤더를 TCP 헤더라고 합니다.
TCP 헤더가 붙은 데이터를 세그먼트(segment)라고 합니다.
여기서 확인할 것은 포트 번호, 일련번호, 확인 응답 번호에 대해 알아 보겠습니다.
URG ACK PSH RST SYN FIN 6비트의 코드 비트의 연결 제어 정보가 기록도니다고 합니다.
연결을 위해서 SYN (연결 요청), ACK (확인 응답)가 사용됩니다.
연결을 끊을때는 FIN (연결 종료 요청), ACK (확인 응답)를 사용합니다.
3-way handshake
연결은 SYN, ACK을 사용하여 3단계로 이루어 지고, 연결 종료는 FIN, ACK를 사용하여 연결을 종료합니다.연결
1. 첫 번째 컴퓨터가 SYN 으로 요청을 보내고
2. 두 번째 컴퓨터가 SYN + ACK로 응답과 연결 확립 요청을 다시 보냅니다.
3. 다시 첫 번째 컴퓨터가 ACK로 연결 확립 응답을 보내어 연결을 이룹니다.연결 종료
1. 첫 번째 컴퓨터가 FIN 연결 종료 요청을 보내고
2. 두 번쨰 컴퓨터가 ACK 연결 종료 응답을 보냅니다.
3. 그리고 두 번쨰 컴퓨터도 FIN 연결 종료 요청을 보냅니다.
4. 첫 번째 컴퓨터도 ACK 연결 종료 응답을 보내어 연결을 종료합니다.
일련번호 확인응답번호
3-way handshake가 끝나고 데이터를 주고받을 때 일련번호(sequence number)와 확인 응답 번호(acknowledgement number)를 사용한다고 합니다. 그리고 첫 일련번호와 확인 응답 번호는 3-way handshake에서 결정됩니다.
일련번호 : 송신 측에서 수신 측에 이 데이터가 몇 번째 데이터인지 알려주는 역할을 합니다.
이걸 통해 수신 측은 원래 데이터의 몇 번째 데이터를 받았는지 알 수 있습니다.확인응답번호 : 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할을 합니다.
받은 데이터의 다음 번호의 데이터를 요청하는 데 사용합니다.예) 일련번호가 3001번인 200바이트 데이터를 받으면, 수신 측은 그 다음 데이터인 3201 데이터를 확인 응답 번호로 보내줍니다.
두 정보를 사용해서 데이터가 손상되거나 유실된 경우 재전송하는 기능을 재전송 제어라고 합니다.
알면 좋은 점인 것 같습니다.
그리고 위에서 처럼 세그먼트(데이터)를 하나 보낼 때마다 매번 요청 확인 응답을 보내기에 비효율적일 수 있습니다. 그래서 확인 응답을 받기 전에 세그먼트를 연속해서 보내는 방법을 사용합니다.연속으로 보낸 세그먼트는 수신 측의 버퍼(buffer)에 쌓이고, 버퍼가 넘치는 현상을 오버플로 (overflow)라고 합니다. 오버플로가 발생하지 않게 세그먼트에 버퍼의 한계 크기를 윈도우 크기(window size)에 넣어서 서로에게 알려 준다고 합니다.
3-way handshake를 할 때 서로 버퍼의 용량을 교환하여 오버플로우를 방지하여 연속적으로 세그먼트를 보내고 확인 응답도 한번에 받고 이를 반복하여 좀 더 효율적으로 데이터를 전송할 수 있습니다.
포트
포트는 송신자와 수신자 간의 여러 응용 프로그램이 동시에 통신할 수 있게 해주는 일종의 논리적 경로입니다. 포트를 이용해 TCP 헤더에 출발지 포트 번호와 목적지 포트 번호를 넣어서 보내어 목표 어플리케이션에 정확히 도달하도록 설정할 수 있습니다.서버 측 포트 번호는 직접 정해야 하지만, 클라이언트 측은 정하지 않아도 된다고 합니다.
그래서 웹 브라우저는 접속할 때 임의의 포트가 자동으로 할당됩니다.
- 포트는 0~65535번을 사용할 수 있고, 0~1023은 주요 프로토콜이 사용하여 well-known port라고 합니다.
주로 사용되는 고정 포트들
어플리케이션 포트 번호 SSH 22 SMTP 25 DNS 53 HTTP 80 POP3 110 HTTPS 443
- 1024번은 사용되지 않고 1025번 이상은 랜덤포트로 클라이언트 측의 송신 포트로 사용됩니다.
UDP
비연결형 통신 프로토콜로 데이터를 빠르고 효율적으로 전달하는 통신 방식입니다.
송신자와 수신자 간의 연결을 설정하지 않습니다.
효율성을 위해 확인 절차 없이 일방적으로 데이터를 보내는 방식입니다.
데이터 전송 속도가 빠르지만 패킷이 손실되거나 순서가 바뀌어도 이를 처리하는 기능은 따로 없습니다.
그래서 실시간 으로 속도가 중요하고, 일부 데이터 손실을 감수할 수 있는 서비스에서 사용된다고 합니다. 예) 온라인 게임, 실시간 스트리밍(인터넷 방송)
| 항목 | TCP (Transmission Control Protocol) | UDP (User Datagram Protocol) |
|---|---|---|
| 연결 방식 | 연결형 (Connection-oriented) | 비연결형 (Connectionless) |
| 신뢰성 | 높음 | 낮음 |
| 순서 | 보장 | 보장함 보장하지 않음 |
| 오류 검출 및 재전송 | 있음 | 없음 |
| 속도 | 상대적으로 느림 | 상대적으로 빠름 |
| 헤더 크기 | 큼 (20 바이트) | 작음 (8 바이트) |
| 오버헤드 | 높음 | 낮음 |
| 사용 사례 | 웹 페이지, 이메일, 파일 전송 등 | 스트리밍, 온라인 게임, VoIP 등 |
참고 출처
https://benlee73.tistory.com/166
https://velog.io/@moonblue/TCP-와-UDP-비교