전에 한번 공부해야겠다고 생각해서 작성했습니다.
TCP(Transmission Control Protocol) - 서버와 클라이언트간에 데이터를 신뢰성 있게 전달
데이터를 송신할 때 마다 확인 응답을 주고 받는 절차 (TCP 3 Way-Handshake & 4 Way-Handshake)가 있어서 통신의 신뢰성을 높인다.
3 Way-Handshake는 TCP / IP 네트워크에서 서버와 클라이언트를 연결하는데 사용되는 프로세스입니다.
접속 요청 프로세스 A가 연결 요청 메시지 전송 (SYN)
접속 요청을 받은 프로세스 B가 요청을 수락했으며, 접속 요청 프로세스인 A도 포트를 열어 달라는 메시지 전송 (SYN + ACK)
접속 요청 프로세스 A가 수락 확인을 보내 연결을 맺음 (ACK)
4 Way-Handshake는 TCP/IP 네트워크 환경에서 서버와 클라이언트를 연결을 해제(세션 종료)하는데 필요한 프로세스입니다.
A에서 B와의 연결 종료를 위해 A에서 FIN 패킷을 보냄 FIN_WAIT1 상태
B는 A로부터 FIN을 받고 응답 패킷 ACK를 보냄 CLOSE_WAIT상태
연결을 종료할 준비가 되면 A에게 FIN 패킷을 보냄 LAST_WAIT
상태A는 확인 패킷 ACK를 보냄 TIME_WAIT 상태
상태 | 설명 |
FIN_WAIT1 | Close 를 호출한 측의 소켓이 진입하는 상태, FIN 보냄 |
CLOSE_WAIT | Close를 받으면 CLOSE_WAIT 상태로 진입함, Ack 보냄 |
FIN_WAIT2 | Ack 신호를 받은 소켓은 FIN_WAIT1 > FIN_WAIT2로 상태 변경됨 |
LAST_WAIT | Close 호출 후 진입하는 상태, FIN 보냄 |
TIME_WAIT | Close를 받으면 진입하는 상태, ACK 보냄 |
CLOSED | 연결 종료!!! |
표 출처 : [TCP] 4-way Handshake란? / 와이어샤크
단어 정리
FLAG | 설명 |
SYN(연결 요청 플래그) | - TCP에서 세션을 성립할 때 가장먼저 보내는 패킷, 시퀀스 번호를 임의적으로 설정하여 세션을 연결하는 데에 사용되며 초기에 시퀀스 번호를 보내게 된다. |
ACK(응답플래그) | - 상대방으로부터 패킷을 받았다는 걸 알려주는 패킷- 다른 플래그와 같이 출력되는 경우도 있습니다. - 받는 사람이 보낸 사람 시퀀스 번호에 TCP 계층에서 길이 또는 데이터 양을 더한 것과 같은 ACK를 보냅니다.(일반적으로 +1 하여 보냄) - ACK 응답을 통해 보낸 패킷에 대한 성공, 실패를 판단하여 재전송 하거나 다음 패킷을 전송한다. |
FIN(연결종료 플래그) | - 세션 연결을 종료시킬 때 사용되며 더이상 전송할 데이터가 없음을 나타낸다. |
RST(연결 재설정 플래그) | - 재설정(Reset)을 하는 과정이며 양방향에서 동시에 일어나는 중단 작업이다. - 비 정상적인 세션 연결 끊기에 해당한다. - 이 패킷을 보내는 곳이 현재 접속하고 있는 곳과 즉시 연결을 끊고자 할 때 사용한다 |
PSH(밀어넣기) | - TELNET과 같은 상호작용이 중요한 프로토콜의 경우 빠른 응답이 중요한데, 이 때 받은 데이터를 즉시 목적지인 OSI 7 Layer 의 Application 계층으로 전송하도록 하는 FLAG. - 대화형 트랙픽에 사용되는 것으로 버퍼가 채워지기를 기다리지 않고 데이터를 전달한다. - 데이터는 버퍼링 없이 바로 위 계층이 아닌 7 계층의 응용프로그램으로 바로 전달한다. |
URG(긴급 데이터 플래그) | - Urgent pointer 유효한 것인지를 나타낸다. - Urgent pointer란 전송하는 데이터 중에서 긴급히 전당해야 할 내용이 있을 경우에 사용한다. - 긴급한 데이터는 다른 데이터에 비해 우선순위가 높아야 한다. |
표 출처 : [TCP] 4-way Handshake란? / 와이어샤크
좀 더 자세한 설명은 Crocus
그림출처 : TCP/IP기초(Subnetting, Ethernet&IP 구조, TCP, UDP)
UDP(User Datagram Protocol) - 비연결형, 신뢰성 없는 전송 프로토콜
UDP는 TCP와 함께 데이터 그램으로 알려진 다문 메시지를 교환하기 위해 사용하는 프로토콜이다. 데이터만 보내고 확인 응답과 같은 절차를 생략할 수 있으므로 통신의 신속성을 높인다.
물리, 데이터링크에서는 MAC 주소로 대상 기기를 찾아내고 네트워크 계층에서는 IP 주소를 이용해 대상 인터페이스(호스트) 를 찾아냅니다. 그러면 이제 대상 기기에도 어떤 프로세스에 데이터를 전할 것인가가 필요한데, 이때 전송 계층에 해당하는 UDP 가 프로세스의 포트 번호를 가지고 있습니다. 포트번호를 이용해 프로세스의 통로를 식별해줍니다.
출처: https://programming119.tistory.com/148
주로 사용되는 서비스 : 디스코드와 같은 데이터에 대한 지연을 피해야하는 실시간 프로그램
TCP와 UDP
두 프로토콜을 구분하는 주요한 차이는 통신의 신뢰성이냐 신속성 차이입니다.
이미지 출처 : What is UDP? | Cloudflare
'프로그래밍 공부' 카테고리의 다른 글
공부한거 정리 (0) | 2021.07.01 |
---|---|
프로그래머스 코딩 연습 C# 체육복 (0) | 2021.05.16 |
유니티 세이브 DB에 저장하기(4) Rest api (0) | 2021.05.13 |
유니티 세이브 DB에 저장하기(3) Json (0) | 2021.05.06 |
유니티 세이브 DB에 저장하기(2) MySQL Workbench (0) | 2021.05.06 |