일단 진행시켜

[3,4계층 프로토콜] TCP/IP, UDP 본문

🌐 Network 기본부터 차근차근

[3,4계층 프로토콜] TCP/IP, UDP

2024. 8. 10. 23:40

1. 서비스의 종류

1.1. 연결형 서비스

  • 데이터 전송 전에 데이터의 전송 경로를 미리 결정
  • 경로가 하나로 이어져 있음 = 이동 경로는 1개뿐
  • 주소 필요 x
  • 연결되어 있어, 상대적으로 신뢰성이 높음
  • TCP

 

1.2. 비연결형 서비스

  • 사전에 경로 설정 x, 패킷 단위로 결정
  • 연결되어 있지 않음 = 주소 필요 o
  • 서로 다른 경로를 통해 전송됨
    • 전송 경로가 여러 개가 존재할 수 있음
    • 도착 순서가 일정하지 않음
  • 따라서, 상위 계층에서 순서를 재조정해야 함
  • 패킷의 도착을 100% 보장하지 않으므로 훼손/분실 위험 등이 존재할 수 있음
  • 이 또한 상위 계층에서 분실 오류를 복구해야 함
  • IP, UDP 

 

  연결형 서비스 비연결형 서비스
경로 미리 결정 패킷 단위로 결정
주소 필요 o 필요 x
방식 신뢰성 Best Effort

 

 

 

 

 

2. IP

  • 네트워크 계층의 비연결형 프로토콜
  • 호스트 주소 지정, 패킷 분할 및 조립 담당
  • 헤더 체크섬만 제공

 

2.1. IP header

0 ~ 3 3~7 7~15 15~31
Version number
(IPv4 or 6)
header length
(16 or) 20 byte
service type
"특정 data는 빨리/늦게 전송"
형평성 어긋남
그래서 잘 안 씀
Packet length
40byte 이상
프레임 54-이더넷14=40
Identification
패킷 분할해서 번호 매겨주어 전송 (커팅된 걸 번호대로 붙이면 원본이 되게)
수많은 데이터를 분할/식별
DF | MF | Offset

DF: Don't Fragment
 패킷 분할 가능: 0, 불가능:1
MF: More Fragment
 마지막 패킷:0, 그외:1
Offset: 병합을 위한 순서파악
Time to Live (TTL)
문제 발생 data는 완벽 전송되지 못 한다.
따라서, 일정시간이 지나면 사라지도록 처리
원활한 통신을 하기 위함이다.
* TTL을 통해 OS 종류를 알 수 있음
Transport (4계층)
수신자 기준, "어느 계층으로 전달해?"
TCP: 06
UDP: 17
Header Checksum
목적: 무결성
데이터 변조 여부 체크.
체크섬이 다르면 문제 있음
Source Address : 송신 호스트의 주소
Destination Address : 수신 호스트의 주소

 

그 아래 Option, packet length도 있는데(총 32비트) 이건 지금 쓰지 않아서 기록할 필요는 없을 것 같다. (요즘 정확도가 올라가서)

 

✔️ IP 헤더 크기 = 20byte

✔️ 3 계층 지원. Best effort 방식.

✔️주소는 4byte

✔️ Identification : 패킷 분할/식별(데이터 크니까 쪼개서 보내야 안정적임)

✔️ DF : Don't fragment(가능 0)

✔️ MF: More fragment(마지막 0)

✔️ Offset : 쪼갠 거 다시 병합하려면 붙이려는 순서를 알아야 한다.

 

위 내용은 꼭 기억해 두자.

 

 

 

 

 

3. TCP

  • 4 계층 연결형 프로토콜
  • 전이중 방식의 양방향 가상 회선을 제공(ex. 무전기)
  • 논리적으로 1:1 연결 (<-> 2 계층은 물리적으로 1:1 연결)

 

3.1. TCP header

0 3~9 10 11 12 13 14 15 16 23 31
Source Port Destination Port
Sequence Number : 순서 번호
Acknowledgement Number : 응답 번호
"알아먹음"을 계속 회신하고, 다음 원하는(순번 seq) 데이터를 지정
TCP
header
length
Reserved
추후예약 기능무조건 0
URG ACK PSH RST SYN F
I
N
Window
수신 윈도우의 버퍼 크기 제어  ➡️ 흐름제어
남은 Buffer(여분의 수용공간)을 알려줌
Checksum : 변조 확인. 무결성 보장
Urgent Pointer
URG에 긴급한 data 표시
얘도 지금은 안 씀

 

무결성 = 완전성 + 정확성 + 일관성

 

 

 

 

3.2. TCP header - flag bit

각각 1bit

URG urgent. 긴급한 거 먼저..!
IP header - service type과  같음
따라서, 지금은 URG 안 쓴다!!
ACK "정상 수신 = 승인"을 의미
PSH push. 수신자 입장: 상위계층으로 올림
RST reset. (= FIN이 없음)
비정상적인 seq-에 대한 응답
 ex. 게임하다 튕기는 거
SYN 양 단의 동기화(1:1)를 위한 요청
맨 처음에 SYN=1로 설정하여 전송
 ex. 대화를 위해 이름을 부름
FIN finish. 끝난 걸 알림
연결 종료 요청 (<-> SYN)

 

✔️ 신뢰성 보장 방식(<-> Best effort방식)

✔️ 변형/ 분실 ➡️ 오류 대응: 재전송

✔️ 수신 버거움 등 ➡️ 속도 제어: 받을 수 있게

✔️ 수신자를 수시로 체크하며 데이터 전송 ➡️ 신뢰성 보장

 

 

3.3. MTU(Maximum Transmission Unit)?

이더넷(Ethernet) 프레임을 제외한 IP Datagram의 최대 크기

MTU=1500. 실제 data=1460

1500 - TCP header - IP header = 1460

1460까지 하나의 패킷으로 전송될 수 있음!

이를 MSS(Maximum Segment Size)라고 부른다.

 

✔️ MTU: 전송될 수 있는 최대 크기의 패킷 또는 프레임(이더넷 헤더 제외)

✔️ MSS: 분할하지 않고 한 번에 보내는 최대 크기 = TCP의 데이터 길이(payload)

✔️Ethernet MTU=1500

✔️Ethernet MSS=1460

 

4. UDP

  • 4 계층 비연결형 프로토콜
  • 정확도 < 속도 중시 (ex. 게임)
  • 현재 잘 쓰진 않음