OSI 4계층에 해당하는 전송 계층에 해당하는 대표적인 예로
TCP와 UDP가 존재
TCP = Tranmission Control Protocol 의 약자
장점 - 신뢰성 O / 단점 - 속도가 느림
Ex) 웹 브라우징, 이메일, 파일 전송 등 데이터의 정확성과 신뢰성이 중요한 서비스
UDP = User Datagram Protocol 의 약자
장점 - 속도가 빠름 / 단점 - 신뢰성 X
Ex) 실시간 스트리밍, 온라인 게임 등 빠른 전송과 지연 최소화가 필요한 서비스
총 20바이트 = 160비트로 구성되어 있으며
각각 어떤 필드가 있고 얼마만큼의 데이터를 할당받는지 알아보자.
Source Port : 송신 측의 포트번호
Destination Port : 수신 측의 포트번호
각각 16비트를 할당
전송하는 데이터의 순서를 의미
데이터를 받은 수신자가 예상하는 다음 시퀀스 번호를 의미
전체 세그먼트 중에서 헤더가 아닌 데이터가 시작되는 위치가 어디부터인지를 표시
미래를 위해 예약된 필드로, 모두 0으로 채워져야 함.
자신의 수신 버퍼 여유용량 크기를 통보하여 얼마만큼의 데이터를 받을 수 있는지 상대방에게 알려주어 흐름제어를 수행하게 되는 필드
데이터를 송신하는 중에 발생할 수 있는 오류를 검출하기 위한 값
말 그대로 긴급 포인터
URG 플래그가 1이라면 수신 측은 이 포인터가 가르키고 있는 데이터를 우선 처리
URG (Urgent) : 긴급 비트, 내가 지금 보내는 데이터를 빠르게 보내라고 요청 시 사용. Urgent Pointer와 세트
ACK (Acknowledge) : 승인 비트, 물어본거에 대한 응답을 해줄 때 사용
PSH (Push) : 수신 측에게 이 데이터를 최대한 빠르게 응용프로그램에게 전달해달라는 플래그
RST (Reset) : 초기화 비트, 상대방과 연결이 되어있는 상태에서 어떤 문제 등이 발생하여 연결 상태를 리셋
SYN (Synchronization) : 동기화 비트, 상대방과 연결을 시작할때 무조건 사용되는 플레그
FIN (Finish) : 종료 비트
(NS, CWR, ECE 비트는 잘 쓰이지 않으므로 생략)
연결 지향적인 TCP는 3-way Handshaking으로 통신을 시작함.
이렇게 3단계를 거치면 클라이언트와 서버의 상태는 연결 생성(Established)
위 그림 설명
서버 측에서 클라이언트로부터 받은 seq 번호가 100일 때 서버는 클라이언트에게 ‘seq 번호 + 1’ 의 ack 번호를 전달
서버는 seq 번호를 처음 보내므로 서버만의 랜덤한 값을 생성해서 클라이언트에게 전달 ex) 200
그럼 클라이언트 측에서 서버로부터 받은 seq 번호가 200이므로 클라이언트는 서버에게 200+1인 201의 ack 번호를 전달
클라이언트가 서버로부터 받은 ack 번호 101은 다시 서버로 seq 번호를 보낼 때 101로 그대로 유지
이러한 방식을 이용한 취약점으로 ‘Section Hi-jacking’ 이라는 공격 방법이 존재
만약 악의적인 해커가 seq과 ack값을 계산해서 서버가 받아야 하는 응답을 해커가 보내면, 서버는 해커를 클라이언트로 착각해 해커와 서버가 연결됨.
TCP의 연결은 3-way Handshaking 방법을 사용한 반면에,
TCP의 해제는 4-way Handshaking 방법을 사용
4-way Handshaking의 과정
클라이언트는 서버에게 연결을 끊고자 Fin(Finish, 종료)패킷을 전송
서버는 그 응답으로 ACK 패킷과 FIN 패킷을 클라이언트에게 각각 전송
마지막으로 클라이언트는 서버의 종료 패킷에 대한 확인으로 ACK패킷을 서버에게 전송
연결 해제
재전송이 발생할 수 있는 상황은 크게 3가지로 나뉘는데,
Retransmission : Packet lost
송신자는 패킷을 보냈지만, 어떤 이유에서인지 중간에 유실되어 수신측에 도달하지 못함.
수신측은 당연히 패킷이 도착하지 않았으므로 ACK를 보내줄리가 없고, 송신자의 Timer는 만료
Retransmssion : ACK lost
송신자가 패킷을 보냈고, 수신 측 또한 응답으로 ACK를 보냄.
그러나, 이번에는 중간에 ACK가 유실되어 송신자에게 도착하지 못했고, 송신자의 Timer는 만료
Retransmission : Early Timeout
송신자가 패킷을 보냈고, 수신 측에서 응답으로 ACK를 보냄.
그러나, 네트워크 지연이 발생해서 송신자의 Timer가 만료되어버린 후에 ACK가 송신자에게 도착
즉, TCP는 앞의 3가지 사례처럼
데이터 또는 ACK 패킷이 손실되면 재전송을 수행하게 되는데,
TCP는 데이터 전송 후 타이머를 설정하고 타이머 종료까지
ACK 패킷을 받지 못하면 timeout이 발생
이 때 timeout은 Retransmission Time Out (RTO)라고 부르는 시간이 지난 후 발생
RTO란?
Timeout 시간이 지나치게 짧으면 재전송 패킷의 낭비가,
지나치게 길면 패킷이 손실되었을 때 기다려야하는 시간이 너무 길어짐.
따라서 어떤 기준을 통해서 정의된 적절한 시간이 필요한데,
이때 RTO (Rtransmission Timeout)라는 개념 사용
총 8 byte = 64 bit 로 구성
출발지 포트 (16bit) : 송신 측의 포트 번호
목적지 포트 (16bit) : 수신 측의 포트 번호
길이 (16bit) : UDP 헤더와 데이터를 합친 길이. 단위는 8 byte ~ 65507 byte
체크썸 (16bit) : 헤더와 데이터를 모두 포함한 데이터그램 전체에 대해 오류를 탐지하기 위해 사용
Checksum : 데이터를 송신하는 중에 발생할 수 있는 오류를 검출하기 위한 값
TCP의 Checksum :
세그먼트 데이터 송신 시도 중에 발생될 비트의 오류를 검출함으로써 필수적으로 해야함.
UDP의 Checksum :
송신측에서 Checksum 값을 전부 0으로 송출하면 수신측은 체크섬을 하지 않아도 되는 선택사항임.
TCP와는 달리 연결을 위해 할당되는 논리적 경로가 X
각각의 패킷이 다른 경로로 전송
정보의 송수신에 대한 신호 절차가 X
최소한의 오류만을 검증하여 패킷의 손실이 상대적으로 많은 편
프로토콜 종류 | TCP | UDP |
---|---|---|
연결 방식 | 연결형 서비스 (패킷 교환 방식) | 비연결형 서비스 (데이터그램 방식) |
전송 순서 | 전송 순서 보장 | 전송 순서가 바뀔 수 있음 |
수신 여부 확인 | 수신 여부를 확인함 | 수신 여부를 확인하지 않음 |
통신 방식 | 1:1 통신 | 1:1 or 1:N or N:N 통신 |
신뢰성 | 높다 | 낮다 |
속도 | 느리다 | 빠르다 |
TCP의 Checksum 구동방식
UDP의 Checksum 구동방식
가장 큰 차이점은 신뢰성이 있냐(TCP) 없냐(UDP), 속도가 느리냐(TCP) 빠르냐(UDP)
Sequence Number : 순서가 바뀌지 않도록, 고유한 식별번호 부여해서 중복되지 않도록 하는 역할
Acknowledge Number : 올바르게 통신이 되고 있는지 확인
RST 플래그 비트 - 정상적인 경로 x 비정상적인 부팅 o - 중간에 패킷을 가로채거나 끊어버리는 용도로 해커들이 악의적인 목적으로 자주 사용
재전송이 일어나는 case
1234순서로 데이터를 보냈는데 목적지에 도착할 땐 1243으로 순서가 바뀌어서 도착했을 때 or 하나 빠져서 124로 도착했을 때 정상적으로 통신이 되지 않았다고 판단하여 재전송 기능 사용
https://evan-moon.github.io/2019/11/10/header-of-tcp/#checksum
https://itwiki.kr/w/TCP_%ED%97%A4%EB%8D%94
https://itwiki.kr/w/TCP#3-Way_Handshaking
https://godjiblog.co.kr/tcp%EC%99%80-udp%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-4%EA%B0%80%EC%A7%80/https://godjiblog.co.kr/tcp%EC%99%80-udp%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-4%EA%B0%80%EC%A7%80/
https://velog.io/@ragnarok_code/Network-TCP-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EC%97%B0%EA%B2%B0%EC%A2%85%EB%A3%8C-%EA%B3%BC%EC%A0%95
https://blog.naver.com/nhrunner/222741116609
https://go-ahead.tistory.com/7
https://www.extrahop.com/company/blog/2016/retransmission-timeouts-rtos-application-performance-degradation/
https://mangkyu.tistory.com/15