일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JPA Lock
- spring
- bean
- component
- 스마일게이트
- 스프링
- 스프링 로그
- Redis
- 개발
- 암호화
- annotation
- 캠프
- 디자인 패턴
- spring security
- Pessimistic Lock
- JPA 비관적락
- 서버
- flask
- Transaction isolation level
- 스프링 log
- spring security 인증
- Inno DB
- 낙관적락 비관적락 차이
- 서버개발캠프
- JPA 동시성
- Android
- 안드로이드
- JPA 낙관적락
- Optimistic Lock
- JPA
- Today
- Total
모르는게 많은 개발자
TCP/UDP 특징 총정리 본문
TCP와 UDP는 데이터를 보내기 위한 전송 계층 프로토콜이다. 두개의 차이점이 무엇인지 알아보자.
1. TCP(Transmission Control Protocol)
특징
- 연결형 서비스를 제공하는 전송 프로트콜 -> 가상 회선 연결 방식 (전송 계층)
- 3-way-handshake를 통한 연결, 4-way-handshake를 통한 연결해제
- 신뢰성 높은 데이터 전송 보장
- 데이터가 누락될 시 재전송
- 흐름 제어, 혼잡 제어
- 전이중, 점대점 방식
3-way-handshake
TCP는 3-way-handshake를 통해 서버와 클라이언트간 연결을 한다. 순서는 다음과 같다.
- Server에서 서버를 작동시켜 Listen()이 실행돼 Client를 기다린다.
- Client에서 Connect()를 통해 Server에 요청을 보내면서 SYN(a)패킷을 보낸다.(a는 난수)
- Server에서 Client의 요청을 수락했다는 응답으로 ACK(a+1)패킷과 SYN(b)패킷을 Client로 전송
- Client에서 Server의 SYN(b) 패킷의 응답으로 ACK(b+1)패킷 전송
4-way-handshake
TCP는 4-way-handshake를 통해 서버와 클라이언트간 연결을 해제한다. 순서는 다음과 같다.
- Client가 Close()를 실행하여 Server에 FIN플래그를 전송하며 연결해제 요청
- Server에서 close_wait으로 바꾼후 응답으로 ACK패킷 전송 (ACK전송후 남은 데이터 전송을 위해 )
- Server에서 Close()실행후 FIN 플래그를 Client에 전송
- Client에서 FIN을 받은후 응답으로 Server에 ACK패킷 전송
재전송(Retransmission) 상황
TCP는 패킷 전송과정에서 분실시 재전송(Retransmission)을 하게 된다.
재전송 발생 상황은 3가지가 있다.
- Packet lost
송신자가 패킷을 보냈지만, 중간에 유실되어 수신측에 도달하지 못함.
수신측에 도달하지 못했으므로 ACK를 송신자에게 보내지 않기 때문에 Timer만료 - ACK lost
송신자가 패킷을 보냈고, 수신자도 ACK를 보냄
하지만 중간에 ACK가 유실되어 송신자 Timer만료 - Early Timeout
송신자가 패킷을 보냈고, 수신자도 ACK를 보냄
하지만 네트워크지연이 발생해 송신자의 Timer가 만료된 후 ACK도착
RTO, RTT Retransmission
RTO(Retransmission Timeout) : 재전송할 Timer 시간
RTO는 보통 운영체제마다 별도의 초기값을 가지지만 네트워크에 따라 동적으로 변경된다.
동적으로 변경 될 때 RTT에 의해서 변한다.
※ RTT : 호스트 간 송신에 대한 응답(ACK)를 받기까지의 시간
※ SampleRTT : 측정된 RTT
송신자가 보낸 패킷에 대한 ACK를 받기까지의 RTO를 SampleRTT로 설정할 경우, 재전송이 발생했을 때 응답온 ACK가 원래의 패킷에 대한 응답이지 재전송에 대한 응답인지 구분하기 어렵다.
그래서 Karn의 Partrdge Algorithm을 사용한다.
알고리즘에 대해 간단히 설명하면
RTO Timer가 만료되면 RTO 값을 2배로 늘린다. 여기서 SampleRTT는 송/수신이 완료된 전송에 대해 값을 기록.
이 값을 이용해 RTO를 계산하는데 사용
Fast Retransmission
Fast Retransmission은 송신측에서 데이터를 전송할 때 데이터가 유실될 경우 수신측에서 duplicate ACK 패킷을 보내게 되는데, 이 패킷을 3개이상 받을 경우 데이터가 손실되었다 판단하고 타이머가 끝나는 것을 기다리지 않고 재전송하는 방법이다.
Nagle Algorithm
Nagle 알고리즘은 '한번에 많이 보내자' 원칙을 기반으로 만들어진 알고리즘이다
패킷을 전송할 때 수신측으로부터 ACK를 받을 때까지 버퍼에 패킷을 쌓고 전송하는 방식이다->트래픽 감소 목적, 응답성 떨어짐
Delayed ACK
Delayed ACK는 패킷을 받은 수신측에서 ACK를 바로 전송하는게 아니라 시간을 두고 그 사이에 패킷 전송할 것이 있으면 ACK랑 같이 실어 보내는 방식 -> 트래픽 감소 목적
2. UDP(User Datagram Protocol)
특징
- 비연결형 서비스를 제공하는 전송 프로토콜
- 데이터를 데이터그램 단위로 처리
- 데이터를 주고 받을 때 전송, 응답 신호절차를 거치지 않음. -> 신뢰성이 낮음
- 흐름제어가 없어 오류를 확인할 수 없음
- TCP보다 속도가 빠르다
- 신뢰성보다는 성능에 중점을 둔다. ex) 실시간 서비스
- TFTP, SNMP, DHCP, NFS, DNS, RIP등에서 사용
- 데이터그램 단위로 전송되며, 크기는 65535바이트로, 크기가 초과되면 잘라서 전송
※ 데이터그램 : 독립적인 관계를 지니는 패킷
https://mangkyu.tistory.com/15
https://asfirstalways.tistory.com/356
https://movefast.tistory.com/36
https://snowdeer.github.io/common-sense/2017/08/17/nagle-algorithm/
'알아가는 개발' 카테고리의 다른 글
Base64 인코딩 개념/과정 (0) | 2020.06.13 |
---|---|
REST란 무엇일까? (0) | 2020.05.14 |
[양방향 암호화] 대칭키 암호화 (0) | 2020.04.22 |
[단방향 암호화]해시 함수 / Salt (0) | 2020.04.21 |
[양방향 암호화] 비대칭 키/RSA 알고리즘 설명 (0) | 2020.04.17 |