-
TCP/IP 4계층개발/네트워크 2023. 6. 11. 16:23
TCP/IP
- 인터넷 프로토콜 스위트 (Internet Protocol Suite) 중 가장 많이 사용되는 프로토콜
- IP(Internet Protocol)는 패킷 통신 방식: 패킷 전달 여부를 보증하지 않음, 패킷을 보낸 순서와 받는 순서가 다를 수 있음
- 데이터의 패킷화, 주소 지정, 라우팅
- TCP(전송 조절 프로토콜, Transmission Control Protocol): IP위에서 동작하는 프로토콜, 데이터의 전달을 보증하고 보낸 순서대로 받게 만듦
- 데이터 분할, 재전송, 흐름 제어
- HTTP, FTP, SMTP 등은 TCP 기반의 애플리케이션 프로토콜
-> 송신자가 수신자에게 IP 주소를 사용하여 데이터를 전달, 그 데이터의 송수신에 대해 잘 전달받았는지 확인
TCP/IP & OSI 비교
OSI 7계층과 TCP/IP 4계층 비교 (출처: 위키피디어) Transport Layer (Layer 4):
- 송수신자간의 논리전 연결을 담당, 엔드포인트(사용자)간의 연결을 생성하고 데이터를 얼마나 보냈는지 확인
- TCP와 UDP가 대표적인 프로토콜
Network Layer (Layer 3):
- IP를 활용하는 부분
- 다른 엔드포인트로 갈 때, 경로와 목적지를 찾아주는 역할 (라우팅)
TCP의 구성과 구조
시작: TCP 3 Way-Handshake & 종료: TCP 4 Way-Handshake
- 장치들 사이에 논리적인 접속을 성립하기 위해 사용
- TCP 연결 및 종료를 설정하기 위해 클라이언트와 서버 간에 주고받는 세 번 또는 네 번의 패킷 교환 과정
- 양쪽 모두 데이터 전송에 대한 준비가 되었다는 것을 보장 + 다른 한쪽이 준비 되었는지 확인
- 양쪽 모두 상대편에 대한 초기 순차일련번호를 얻음
3 Way Handshake
1. 클라이언트가 서버에게 SYN(Synchronize) 패킷을 전송. 이 패킷에는 클라이언트의 초기 시퀀스 번호가 포함.
2. 서버는 클라이언트의 SYN 패킷을 받고, SYN-ACK(Synchronize-Acknowledgment) 패킷을 클라이언트로 응답. 이 패킷에는 서버의 초기 시퀀스 번호와 클라이언트의 시퀀스 번호에 1을 더한 값이 포함.
3. 클라이언트는 서버의 SYN-ACK 패킷을 받고, ACK(Acknowledgment) 패킷을 서버로 응답. 이 패킷에는 서버의 시퀀스 번호에 1을 더한 값이 포함.
-> 3 Way-Handshake가 완료되면 클라이언트와 서버 간에 신뢰성 있는 연결이 설정-> 클라이언트와 서버는 이후 데이터를 안전하게 주고받을 수 있게 됩니다.
4 Way Handshake
1. 클라이언트가 서버에게 연결 종료를 알리는 FIN(Finish) 패킷을 전송.
2. 서버는 클라이언트의 FIN 패킷을 받고, ACK 패킷으로 응답. 이때 서버는 아직 보낼 데이터가 남아있을 수 있으므로, 연결 종료를 지연 (Sever's Status: TIME_WAIT).
3. 서버가 모든 데이터를 전송하고 연결을 종료할 준비가 되었다면, 클라이언트에게 FIN 패킷을 전송.
4. 클라이언트는 서버의 FIN 패킷을 받고, ACK 패킷으로 응답. 이때 클라이언트는 일정 시간 동안 연결 상태를 확인(Client's Status: TIME_WAIT, Default: 240 sec)하다가 연결을 종료.
-> 4 Way-Handshake가 완료되면 클라이언트와 서버 간의 TCP 연결이 정상적으로 종료-> 양쪽 모두가 데이터를 모두 송수신한 후에 연결을 종료하는 과정입니다.
TCP Header & Segment
1. TCP 헤더 (TCP Header):
- 송신지 포트 (Source Port)와 목적지 포트 (Destination Port): 송신지와 목적지 애플리케이션을 식별하기 위한 포트 번호
- 시퀀스 번호 (Sequence Number): 데이터 스트림의 순서를 지정하기 위한 번호
- 확인 응답 번호 (Acknowledgment Number): 수신한 패킷들 중에서 기대하는 다음 패킷의 시퀀스 번호를 의미
- 데이터 오프셋 (Data Offset): TCP 헤더의 길이를 나타내며, 4바이트 단위로 표현
- 제어 플래그 (Control Flags): 예를 들어 SYN, ACK, FIN 등의 제어 비트를 포함하여 TCP 연결 및 종료를 제어
- 윈도우 크기 (Window Size): 수신 측이 수용할 수 있는 데이터의 양
- 체크섬 (Checksum): 오류 검출을 위한 체크섬 값
- 그 외의 옵션 (Options): 최대 세그먼트 크기 (MSS), 유리창 확장 등 추가적인 옵션 정보를 포함
2. TCP 세그먼트 (TCP Segment):
- TCP 헤더와 애플리케이션 데이터로 구성
- 세그먼트는 전송되는 데이터의 단위이며, TCP 헤더와 함께 전송되어 TCP 연결 상에서 패킷을 형성TCP와 UDP 비교하기
1. TCP (Transmission Control Protocol):
- 연결 지향 프로토콜: TCP는 연결을 수립하고 유지한 후 데이터를 전송하는 연결 지향 프로토콜
- 신뢰성: TCP는 데이터의 신뢰성을 보장하기 위해 확인 응답, 재전송, 흐름 제어, 혼잡 제어 등의 기능을 제공. 데이터의 손실이나 손상이 발생하면 재전송을 통해 보정.
- 지연: TCP는 데이터의 신뢰성을 위해 추가적인 오버헤드를 가지고 있기 때문에 일부 지연이 발생할 수 있음.
- 사용 예시: 파일 전송, 웹 페이지 로딩, 이메일 전송 등 신뢰성이 중요한 데이터 전송에 주로 사용.
2. UDP (User Datagram Protocol):
- 비연결성 프로토콜: UDP는 연결을 수립하지 않고 단순히 데이터를 전송하는 비연결성 프로토콜. 데이터 패킷을 독립적으로 전송하며, 순서가 보장되지 않고 데이터의 신뢰성을 보장하지 않음.
- 신뢰성: UDP는 데이터 전송에 대한 오류 검사만 수행하고, 재전송이나 확인 응답 기능을 제공하지 않음. 따라서 데이터의 손실이나 손상이 발생하면 별도의 처리가 필요.
- 지연: UDP는 신뢰성을 위한 추가적인 오버헤드가 없기 때문에 TCP보다 더 낮은 지연 시간을 가짐.
- 사용 예시: 실시간 스트리밍, DNS 조회, 음성 및 영상 통화 등 신속한 데이터 전송이 요구되는 경우에 주로 사용.
UDP(User Datagram Protocol)의 프로토콜 구조
1. 송신지 포트 번호 (2바이트): UDP 패킷을 송신하는 애플리케이션을 식별하기 위한 포트 번호
2. 목적지 포트 번호 (2바이트): UDP 패킷을 수신하는 애플리케이션을 식별하기 위한 포트 번호
3. UDP 길이 (2바이트): UDP 패킷의 전체 길이, 헤더와 데이터를 합친 길이
4. 체크섬 (2바이트): 오류 검출을 위한 체크섬 필드. 송신 측에서 패킷을 생성할 때 체크섬을 계산하고, 수신 측에서는 체크섬을 다시 계산하여 송신 측과 비교하여 패킷의 완전성을 검증.
5. 데이터 (가변 길이): 실제로 전송되는 데이터. UDP는 데이터의 신뢰성을 보장하지 않으므로, 데이터의 순서나 손실 여부에 대한 보장을 하지 않음.서버와 클라이언트의 UDP 통신 과정
1. 서버 초기화:
- 서버는 특정 포트 번호를 할당하여 대기 상태로 진입
2. 클라이언트 초기화:
- 클라이언트는 서버의 IP 주소와 포트 번호를 알고 있어야 함
3. 클라이언트에서 서버로 데이터 전송:
- 클라이언트는 서버의 IP 주소와 포트 번호를 목적지로 하는 UDP 패킷을 생성
- 패킷에는 전송할 데이터가 포함
- 클라이언트는 생성한 패킷을 네트워크로 전송
4. 서버에서 클라이언트로 데이터 전송:
- 서버는 클라이언트로부터 전송된 UDP 패킷을 수신
- 패킷에 포함된 데이터를 서버가 처리하고, 필요한 응답을 생성
- 서버는 생성한 응답을 클라이언트의 IP 주소와 포트 번호를 목적지로 하는 UDP 패킷에 담아 네트워크로 전송
5. 클라이언트에서 서버로부터 응답 수신:
- 클라이언트는 서버로부터 전송된 UDP 패킷을 수신
- 패킷에 포함된 데이터를 클라이언트가 처리하고, 필요한 동작을 수행
- UDP 통신은 연결 지향적인 특성을 가지지 않으므로, 클라이언트와 서버는 서로의 상태를 추적하지 않고 독립적으로 통신- 데이터의 신뢰성이 보장되지 않으므로 패킷의 손실이나 순서 변경이 발생할 수 있음
참고
[TCP/UDP] TCP와 UDP의 특징과 차이
오늘은 네트워크의 계층들 중 전송 계층에서 사용하는 프로토콜에 대해서 알아보려고 합니다. 전송계층은 송신자와 수신자를 연결하는 통신서비스를 제공하는 계층으로, 쉽게 말해 데이터의
mangkyu.tistory.com
'개발 > 네트워크' 카테고리의 다른 글
SSH (Secure Shell Protocol) 개념 (0) 2023.06.13 OSI 7 계층 정리 (0) 2023.06.08 와이파이(Wi-Fi)의 통신 방식 (0) 2023.06.01 다중화(Multiplexing) 방식 정리 (0) 2023.05.31 네트워크 전송 매체 정리 (0) 2023.05.28