도당탕탕
TCP와 UDP 본문
INTRO
- 데이터 전송 방식
- TCP?
- UDP?
- 작동 원리 및 차이
데이터 전송 방식
- 네트워크란 두대 이상의 컴푸터를 연결하고 서로 통신 할 수 있는 것을 말한다.
- 즉 어떤 연결을 통해 컴퓨터의 자원을 공유하는 것이다.
- 전송 계층에서 신뢰성 있는 데이터 전송을 담당한다.
- 신뢰성 : 데이터를 순차적으로 안정적으로 전달
- 전송 : 포트 번호에 해당하는 프로세스에 데이터를 전달
- 전송 계층이 없다면?
- 데이터 순차 전송이 원할하지 않는다.
- 송수신자 간의 데이터 처리 속도가 차이가 나서 수신자의 처리할 수 있는 데이터량을 초과 할수 있는 문제가 일어날 수 있다.
- 네트워크가 혼잡하여 데이터 처리 속도가 느려지는 문제가 일어난다.
- 즉 데이터 손실이 발생
- OSI 7계층, TCP/IP 4계층
- http에서 데이터를 어떻게 송수신 할까?
- 송신포트(클라이언트)를 랜덤으로 맞추고 수신포트(서버)를 80으로 맞춘 뒤 웹 서버에 데이터를 전달한다.
- 데이터를 잘받으면 서버에서 수신포트(80)으로 두고 랜덤으로 맞춘 송신포드에 보낸다.
- 만약 클라이언트 방화벽에서 80포트를 닫으면 어떤 웹서버도 접속을 하지 못한다. 즉 어떤 패킷이라도 80포트로 나가면 탈락시킨다는 의미이다.
TCP
- 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜이다.
- 신뢰성 있는 데이터 통신을 한다.
- 양방향 통신을 가능하게 해준다.
특징
- 데이터의 순차 전송을 보장한다.
- 혼잡 및 흐름을 제어한다.
- 3-way handshake 과정을 통해 연결 하고 4-way handshaking을 통해 해제한다.
- 전이중 및 점대점 방식을 사용한다.
흐름 원리
- 3-way handshake : TCP Connection을 할 때
- 클라이언트가 서버에게 SYN을 보낸다.
- 서버에서 잘 받으면 클라이언트에게 ACK을 1로 설정하고 자신의 SYN을 같이 보낸다.
- 서버에서 ACK + SYN을 받았으면 클라이언트는 ACK + Packet을 보낸다.
- 서버와 클라이언트의 연결되고 나서 데이터 전송 순서
- 클라이언트가 Packet을 준다.
- 서버가 잘 받으면 ACK를 준다.
- 만약 서버가 못받았을 경우 클라이언트에서 Packet을 계속 준다.
- 4-way handshake : TCP Connection을 끊을 때
- 클라이언트가 FIN을 1로 설정하고 서버에게 전달한다.
- 서버가 클라이언트에게 ACK을 준다.
- 서로 타임 웨이트를 가지고(못받은 데이터가 있을 수 있기 때문에) 이상 없을 경우 서버에서 FIN을 1로 설정해 클라이언트에게 보낸다.
- 클라이언트가 FIN을 받으면 서버에게 ACK을 보낸다.
TCP 서버
- 서버 소켓은 연결만 담당한다.
- 스트림 전송으로 전송 데이터의 크기는 무제한이다.
- 패킷에 대한 응답을 해야 하기 때문에 속도가 느리다.
- 서버와 클라이언트는 1:1로 연결된다.
- 연속성이 필요한 Streaming 서비스에 불리하다.(재전송 요청 성격 탓에)
TCP 세그먼트
- 데이터를 보낼 때 작은 단위로 분할해 데이터를 보내는데 그 데이터 조각을 말한다.
- TCP 헤더 + 클라이언트 데이터
- TCP에서의 패킷이라 부른다.
- 어플리케이션 단에서 실행한다.
- header의 크기 : 20byte ~ 60byte
UDP
- 데이터를 데이터그램 단위로 처리하는 프로토콜이다.
- 비교적 데이터의 신뢰성이 중요하지 않고 연속성이 중요한 서비스에 사용한다.(비디오 스트리밍)
특징
- 비연결형 서비스로 데이터그램 방식을 제공한다.
- 정보를 주고 받을 때 신호절차가 없다.
- TCP 속도 보다 빠르다.
흐름 원리
- 클라이언트에서 서버에 데이터를 보내는 순서
- TCP처럼 체크를 하지 않고 클라이언트에서 패킷을 바로 보냄
- 최소한의 오류 검출을 한다.
UDP 서버
- UDP에는 연결 자체가 없어 소켓 구분이 없다.
- IP 기반으로 데이터를 전송한다.
- 1:1, 1:N, N:N 방식을 사용한다.
- 흐름제어가 없어서 패킷이 제대로 전송 혹은 오류가 있는지 확인할 수단이 없다.
TCP/UDP 구조 설명
- Source Port : 패킷을 송신하는 시스템의 포트번호를 나타낸다. (80, 20,21...)
- Destination Port : 패킷을 수신할 시스템의 포트 번호를 나타낸다.
- CheckSum : 데이터가 전송 중에 손실되지 않고 원본과 동일한지 검사한다.
TCP
- ACK : 데이터를 받는 곳에서 제어 할 때 사용하는 Flag bit
- SYN : TCP가 Connection 연결을 할 때 사용하는 Flag bit
- FIN : Connection을 끊을 때 사용하는 Flag bit
- Sequence Number : 세그먼트 데이터의 순서번호를 표기한다.
- Acknowledge Number : 상대방으로부터 수신한 데이터의 바로 다음에 수신할 데이터 순서 번호를 나타낸다.
- TCP에서 CheckSum은 필수
UDP
- UDP에서는 CheckSum은 선택
- 만일 체크섬 값이 0으로 하면 수신측은 체크섬 계산을 하지 않아도 됨
정리
- TCP, UDP의 특성을 파악하고 상황에 따라 적절한 프로토콜을 사용하자.
- TCP, UD의 헤더에 대해 파악하면 성능 개선을 이룰 수 있다.
'Web' 카테고리의 다른 글
Http Request VS Response (0) | 2020.01.16 |
---|---|
WebServer vs Was (0) | 2020.01.15 |
Comments