들어가기전에
TCP와 UDP는 OSI 4 layer의 Transport이다.
이 송신측과 수신측의 프로세스를 포트번호로 찾는 역할을 한다는 사실을 기억하고 들어가자
인터넷에서 데이터를 안정적으로 전송하기 위해 사용되는 프로토콜
안정적
이라는 키워드를 주목하자. 도대체 어떻게 데이터를 전송하는 프로토콜이길래
안정적으로 전송이라는 표현을 했을까?
TCP를 사용하는 두 어플리케이션(클라이언트, 서버)이 데이터를 서로 교환하기 전에
TCP 접속을 성립해야만 한다
즉 두 어플리케이션간의 연결을 설정해주어야 한다.
TCP는 전송한 데이터가 수신측에 올바르게 도착했는지를 확인해 신뢰성 있는 통신을 수행한다.
송신측의 TCP가 수신측이 갖고 있는 버퍼의 크기만큼 데이터를 보내도록 제어
네트워크 내의 존재하는 여러 패킷이 과도하게 증가되는 현상을 혼잡이라하며
이를 방지하거나 제거하는 기능이다.
위의 특징을 보니 결국 데이터의
안정성
을 위해서 어플리케이션을 연결하고,
데이터가 잘 도착했는지를확인
하는 절차를 통해 안정성을 지킨다고 볼 수 있다
그렇다면 실제로 프로토콜이 어떻게 구조되어 있길래 이를 지킬 수 있는지 알아보자.
처음 이 사진을 보면 이게 뭐지..? 할 것이다. 아래 설명을 통해 이해해보자
TCP 헤더의 크기는 32bit(4byte) * 5 = 기본 20byte
OPTION(예비공간) 최대 40, 즉 20 ~ 60바이트의 크기를 가진다.
송,수신 프로세스를 구분하기 위한 포트번호
간단하게 설명하면 송, 수신간의 연결을 위해 사용되는 번호라고 이해하면 되고
이를 실제로 어떻게 활용하는지 확인하기 위해서는 3-way handshake라는
TCP의 연결 방식에 대해 알아야 하나 이 글에서는 다루지 않고 다음 포스팅을 통해
다룰 것이다.
그냥 연결을 확인하기 위해 서로 주고받는 번호라고만 이해하고 넘어가면 좋을듯 하다.
현재 TCP 헤더의 크기 5 ~ 15의 값을 가진다. = 4*5 = 20, 4 x 15 = 60 20 ~ 60byte
앞으로 TCP 프로토콜이 변경될 경우를 대비해서 예약된 필드 (사용x)
URG : 이 비트가 1로 설정되면 긴급한 데이터를 보냄
ACK : 이 비트가 1로 설정되면, 해당 패킷이 데이터를 확인하고 응답하는 것을 나타냄
PSH: 이 비트가 1로 설정되면, 해당 패킷이 수신측에서 즉시 처리되어야 한다는 것을 나타
RST: 이 비트가 1로 설정되면, TCP 연결이 비정상적으로 종료되었다는 것을 나타냄
SYN : 이 비트가 1로 설정되면, 해당 패킷이 TCP 연결 설정을 시작한다는 것을 나타냄
FIN : 이 비트가 1로 설정되면, 해당 패킷이 TCP 연결 종료를 요청한다는 것을 나타냄
TCP header + TCP 데이터에 대한 체크섬 수행 (에러 검출)
URG 플래그가 1일 때만 유효한 값을 가짐 -> 긴급 데이터의 위치를 가리킴
위와 같이 연결과 관련된 정보가 프로토콜에 대해 있는 것을 알 수 있다.
TCP와 달리 신뢰성을 제공하지 않는 프로토콜
즉 신뢰를 보장하지 않기 때문에 헤더가 TCP에 비해 적고 간단하다.
그러면 데이터의 손실이 많아질텐데 왜 많이 쓸까?
TCP는 연결 설정을 맺는 반면 UDP는 연결설정 없이 데이터를 전송하기에 빠른 서비스 제공
TCP는 연결에 대한 상태정보(ACK, SEQ)를 유지하나 UDP는 연결 정보 저장 x
TCP에서 사용하는 혼잡제어 매커니즘은 송신측에서 보내는 데이터 양의 제한이 있어 실시간 전송에서는 제한이 있다.
하지만 UDP는 패킷의 손실이 생기더라도 실시간 전송을 지원할 수 있다.
TCP 헤드는 20바이트이지만, UDP는 8바이트 -> 더 빠르다
즉 UDP는 데이터의 안정성을 보장하지는 않지만 실시간 전송에 유리한 특성을 가진다
각 필드에 대해서는 위에서 설명했으니 넘어가나 한 눈에 봐도 굉장히 간단해진 것을 볼 수 있다.
- TCP는 연결 지향적이기 때문에 데이터의 안정성을 보장하나,
속도가 UDP에 비해 느리다- UDP는 연결을 하지 않기에 데이터의 안정성을 보장하지 않으나, 속도가 UDP에 비해 빠르기 때문에 실시간 전송에서 사용된다.
자 이렇게 이번에 TCP와 UDP에 대해 알아보았다.
이 글만으로는 ACK, SEQ 등이 어떻게 구체적으로 사용되는지는 알 수 없을 것이나,
이후 3-way handshake와 4-way handshake의 포스팅을 준비하도록 하겠다.