UDP 프로토콜
UDP 프로토콜은 전송 방식이 단순해서 서비스의 신뢰성이 낮고, 데이터그램 도착 순서가 바뀌거나, 중복되거나, 심지어는 통보없이 누락시키기도 한다.
UDP 프로토콜은 일반적으로 오류의 검사와 수정이 필요 없는 프로그램에서 수행한다.(ex. 영상 스트리밍)
DNS 서버는 UDP 프로토콜을 사용한다.
UDP 프로토콜 구조
3계층의 IP와 거의 같다. + PORT 번호+ 체크섬 정도만 추가
TCP 프로토콜
TCP(Transmission Control Protocal)은 전송 제어 프로토콜로, OSI 7Layer 중 4계층인 전송계층에 속하는 중요 프로토콜이다. 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 통신을 안정적으로, 순서대로, 에러없이 교환할 수 있게 한다.
TCP 프로토콜 구조
- Control Flags : TCP는 연결이 됐는지 확인을 한 후 전달한다.(3 way handshake) 이때 사용하는 플래그 값.
- URG: 긴급 데이터 설정
- ACK: 수신 확인 응답 설정
- PSH: 송수진 버퍼에 있는 데이터를 즉시 처리
- RST: 연결 중단(강제 종료,리셋)
- SYN: 연결 설정(동기화 비트로 상대방과 연결을 시작할 때 무조건 사용)
- FIN: 연결 종료(정상 종료)
TCP를 이용한 통신 과정 - 3 Way HandShake
1. 클라이언트가 서버에게 요청 패킷을 보내고
2. 서버가 클라이언트의 요청을 받아들이는 패킷을 보내고
3. 클라이언트는 이를 최종적으로 수락하는 패킷을 보낸다.
이때 전달되는 패킷은 Eth/PIv4/TCP로, 페이로드는 포함되어있지 않다.
- 실제 데이터를 포함해서 송수신하는 과정은 다음과 같다.
위의 3개의 과정을 3 way handshake라고 부른다.
TCP 상태 전이도
- LISTEN: 포트번호를 서버쪽에서 프로그램이 사용중인 상태 (TCP 요청을 시작하기 위해 항상 LISTEN 상태여야 한다)
- ESTABLISHED: 3 way handshake로 연결이 수립된 상태
- 보낼 쪽에서 다시 보낼 때는 SEQ번호와 ACK번호가 그대로 이다.
- 받는 쪽에서 SEQ번호는 받은 ACK번호가 된다.
- 받는 쪽에서 ACK번호는 받은 SEQ번호 + 데이터 크기가 된다.