Computer Science/CS

[Network] TCP/IP, OSI 7 Layer, UDP

owls 2023. 5. 15. 13:17
728x90

TCP/IP

Transmission Control Protocol / Internet Protocol

 

Internet Protocol Suite :

인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 통신규약(프로토콜)의 모음이다.

인터넷 프로토콜 슈트 중 TCP 와 IP가 가장 많이 쓰이기 때문에 TCP/IP 프로토콜 슈트라고도 불린다.

 

패킷 통신 방식의 인터넷 프로토콜인 IP와 전송 조절 프로토콜인 TCP로 이루어져 있다.

IP : 메세지나 파일을 작은 패킷으로 나누거나 재조립하여 송수신에 반영하는 일을 담당.
     패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있다.

TCP : IP위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해 준다.
      각 패킷의 주소 부분들을 처리하여 패킷들이 목적지로 정확하게 송수신하는 역할.
      HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 애플리케이션 프로토콜들이 IP위에서 동작한다.

IP는 데이터가 전송되는 주소를 얻습니다.(IPv4, IPv6).

TCP는 해당 IP주소를 찾으면 정확한 데이터 전달을 보장합니다.

그러나 TCP는 독자적으로 활동할 수 없기 때문에 반드시 IP주소가 필요합니다.

(ex : IP : 휴대폰 전화번호, TCP : 다른 전화로 다른 사람과 통화할 수 있게 해주는 기술)

 

 

TCP/IP를 통해 인터넷에서 컴퓨터들이 서로 정보를 주고 받을 수 있습니다.

 

 

TCP/IP 계층별 역할

Layer 설명 Protocol 데이터
단위
Application Layer
(응용 계층)
응용 프로그램간의 데이터 송수신 제공.
응용프로그램이 네트워크에 접근 가능하도록 인터페이스 기능 수행.
TELNET, FTP, HTTP, SNMP, SMTP, HTTP, DNS, WAP Message
Transport Layer
(전송 계층)
(종단간)호스트들간의 신뢰성 있는 통신 제공. TCP, UDP, RTP, RTCP Segment
Internet(Network) Layer
(인터넷 계층)
데이터 전송을 위한 주소 지정, 경로 설정을 제공. IP, ICMP, IGMP, ARP, RARP Packet
Network Access Layer
(네트워크 접근 계층)
(Data Link Layer)
실제 데이터(프레임)를 송수신하는 역할

Ethernet, IEEE802, HDLC, X.25, RS-232C, PPP Frame

프로토콜 설명

- IP : 호스트 네트워크 주소 관리하고 패킷을 라우팅하는 역할 수행.

- ARP : 네트워크 호스트들의 하드웨어 주소를 얻는데 사용

- ICMP : 패킷 전송에 관한 오류 메시지 처리 담당

- TCP : 연결 지향형

- UDP : 비연결성

 

OSI 7Layer

네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것입니다. 국제 표준화 기구(ISO)에서 정의한 네트워크 표준 모델입니다.

Layer 특징 데이터 종류  
Application
(응용)
각종 응용 서비스 제공.
네트워크 관리.
Data
( Message, datagram)
FTP, TFTP, SNMP, SMTP, Telent, HTTP, DNS, DHCP  
Presentation
(표현)
네트워크 보안(암/복호화).
인코딩/디코딩.
압축/압축해제.
포맷 변환 수행.
전송하는 데이터의 표현방식 결정
Data
( Message, datagram)
ASCII, Mpeg, jpg, MME  
Session
(세션)
소켓 프로그램.
동기화.
세션 연결/관리/종료.
Data
( Message, datagram)
전송모드 결정(반이중, 전이중 등), SQL, RPC  
Transport
(전송)
데이터 전송 보장.
흐름 제어.
Quality Of Service
(QOS).
port번호, 전송방식 결정(TCP헤더 붙음)
Segment TCP, UDP, SCTP L4 스위치
Network
(네트워크)
통신경로 설정, 중계 기능 담당.
IPv4 & IPv6.
라우터를 통해 경로 선택하고 IP주소 정하여 경로에 따라 패킷 전달.(IP헤더 붙음)
Packet IP, ICMP, IGMP, ARP, RARP, NAT, RIP, BGP 라우터,
L3 스위치
Data Link
(데이터 링크)
오류제어, Frame화.
매체제어(MAC).
에러 검출, 에러 정정, 흐름 제어.
프레임에 MAC주소 부여.
Frame 인터넷, 토큰링, PPP, SLIP, 802.11 브리지,
L2 스위치
Physical
(물리)
물리적 연결 설정,해제.
전송방식, 전송매체
Bit, Stream 기계적, 전기적, 절차적 규격 (더미)허브,
리피터

 

데이터 단위

Message(Datagram)

Session, Presentation, Application Layer에서 부르는 데이터 명칭.

 

Segment

Transport Layer에서 부르는 데이터 명칭.

-헤더 : 송신지 port, 수신지 port

 

Packet

Network Layer에서 부르는 데이터 명칭.

-헤더 : 송신지 IP, 수신지 IP

 

Frame

DataLink Layer에서 부르는 데이터 명칭.

-헤더 : MAC주소

프레임 헤더는 스위칭 영역과 라우팅 통신 영역에 있을 때 담는 정보가 다름.

LAN : MAC주소

WAN : WAN영역에 대한 정보

 

Bit Stream

Pysical Layer에서 부르는 데이터 명칭.

 

 

TCP/IP vs OSI 7Layer

둘 다 통신 모델로, 어떻게 Layer를 나누고 정의했는지 차이가 있습니다. 

TCP/IP OSI 7Layer
4 계층 7 계층
미정부기관 DARPA에서 개발 시작하고, ARPANET을 통해 오늘날의 인터넷 탄생 ISO에서 개발
인터넷 계층만 사용 네트워크 계층을 사용하여 라우팅 표준 및 프로토콜 정의
전송 제어 프로토콜 개방형 시스템 상호 연결
인터넷을 통해 데이터를 전송하는데 사용되는 클라이언트-서버 모델 컴퓨팅 시스템에 사용되는 이론 모델
많이 사용.
표준화되어 신뢰성 높음.
사용되지는 않음.
이론적으로는 표준이지만 실제적으로 구현되는 예가 거의 없어 신뢰성 저하.

 

TCP vs UDP

TCP

신뢰성 있는 데이터 전송을 지원하는 연결지향형 프로토콜입니다.

연결 지향형인 TCP는 3-way handshaking이라는 과정을 통해 연결 후 통신을 시작하는데, 흐름 제어와 혼잡 제어를 지원하며 데이터의 순서를 보장. 연결 해제는 4-way handshaking.

- 흐름 제어 : 보내는 측과 받는 측의 데이터 처리속도 차이를 조절해주는 것

- 혼잡 제어 : 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것

- 신뢰성 
   패킷이 그들의 목적지에 도달했는지 확인하며 패킷이 도달될때마다 ACK를 수신하기 때문에 신뢰성 있는 프로토콜 -> TCP retransmission
- 연결지향적
   핸드쉐이킹 과정을 수행하고 목적지 컴퓨터와 함께 가상연결을 형성

- 패킷 순서
   패킷 내에 순서번호를 사용하여 각 패킷들이 순차적으로 수신되도록 한다.

- 혼잡 제어
   목적지 컴퓨터는 송신지 컴퓨터의 너무 많은 데이터 전송으로 인해 처리가 어렵거나 전송 속도가 느려질 경우 이를 통보한다.

- 사용
   신뢰성 있는 전송이 필요할 때 사용된다.

- 속도와 오버헤드
   상당한 양의 자원을 사용하며 UDP보다 느리다.
   
 - 데이터 경계
 	데이터의 경계를 구분하지 않음
    
- 통신
	일 대 일(Unicast)통신

 

TCP Retransmission

TCP는 신뢰성 있는 통신을 위해 자신이 보낸 패킷에 대해 ACK를 확인한다. 

보낸 쪽에서는 반드시 받는 쪽이 잘 받았다는 신호를 주어야 다음 전송을 하게 된다.

(송신에 대한 응답이 오지않는 경우 일정시간을 대기 후 다시 재전송 한다.)

client가 보낸 SYN패킷에 대한 ACK를 받지 못하면 다시 SYN패킷을 보내게 된다.

이런 과정을 Retransmission Timer라는 커널 타이머에 의해 동작하게 된다.

 

송신자는 패킷을 송신하고 나면 별도의 정의된 Timer를 시작한다. 그리고 Timer의 시간이 만료되면 다시 패킷을 전송한다.

 

재전송이 발생할 수 있는 상황

(1) Retransmission : Packet Lost

     송신자는 패킷을 보냈지만, 중간에 유실되어 수신측에 도달하지 못했다. 수신측은 당연히 패킷이 도착하지 않았으므로 ACK패킷을 보낼리 없고, 송신자의 Timeout은 만료된다.

(2) Retransmission : ACK lost

     재전송이 발생할 수 있는 두 번째 상황, 송신자가 패킷을 보냈고, 수신 측 또한 응답으로 ACK를 보냈다. 중간에 ACK가 유실되어 송신자에게 도착하지 못했다. 송신자의 Timeout은 만료된다.

(3) Retransmission : Early Timeout

     송신자가 패킷을 보냈고, 수신 측에서 응답으로 ACK를 보냈다. 그러나 네트워크 지연이 발생해서 송신자의 Timer가 만료되어 버린 후 ACK가 송신자에게 도착한다.

 

 

RTO, RTT

RTO ( Retransmission Timeout) : 타이머가 작동하는 시간을 의미

RTT ( Round Trip Time) : 네트워크 통신을 하는 두 노드 간에 패킷이 전달되는데 소요되는 시간을 의미

                                         종단 간 거리가 멀수록 RTT값은 커지게 된다.

RTT는 RTO값을 결정하는데 아주 중요한 요소가 된다.

RTO는 내부적으로 복잡한 계산식을 거친 후 동적으로 설정된다. 

두 종단 간 통신이 이루어지는데 첫 번째 SYN 패킷에 대한 RTO는 어떻게 결정되는가?

TCP 핸드쉐이크를 하기 위한 첫 번 째 SYN패킷은 상대방의 RTT에 대한 정보가 전혀 없기에 계산이 불가능하다.ㅏ

그래서 지정된 값을 사용한다 -> InitRTO 라고 부르며, OS마다 값이 조금씩 다르다.

Linux에서는 1초로 되어 있다. InitRTO값은 2의 제곱수로 늘어난다.(1초-> 2초 -> 4초 ...)

 

애플리케이션 타임아웃

InitRTO의 경우 1초로 설정되어 있기 때문에 애플리케이션의 타임아웃은 1초보다 큰 값으로 설정해야 한다. 이미 맺어진 재전송은 RTT를 기반으로 생성되기 때문에 대부분 1초를 넘기지 않겠지만, TCP Handshake를 맺는 과정에서 재전송은 최소 1초는 소모되기 때문에 애플리케이션에서 1초로 설정한다면 재전송으로 커버 가능한 통신을 타임아웃 에러로 끊어 버리게 된다.

(커넥션 풀 방식으로 네트워크 세션을 미리 만들어 두고 통신하는 경우에는 InitRTO가 발생할 일이 없기 때문에 더 작은 값으로 설정해도 된다.)

 

RTO_MIN

RTO는 RTT기반으로 동적으로 생성되는데, RTO값에 영향을 주는 다른 요소가 RTO_MIN이다.

RTO의 최솟값이다. 별도로 설정해서 사용하지 않는다면 디폴트로 200ms로 되어 있다.

RTT가 아무리 작아도 RTO값은 200ms밑으로 내려갈 수 없음을 의미한다.

 

RTO_MIN은 ip route 명령을 통해 변경할 수 있다.

ip route change default via <default gw> dev <ethernet> rto_min 100

100ms로 RTO_MIN을 변경한 후 ss-i 명령어를 입력하면 RTO값이 변해있는 것을 확인할 수 있다.

 

서버와 네트워크 장비의 성능이 좋은 환경에서는 200ms RTO_MIN값은 너무 큰 값이라고 생각된다.

RTO_MIN이 너무 작으면 재전송이 자주 일어나게 된다. 이는 또 다른 부하를 일으켜 시스템의 성능과 서비스 응답 속도에 악영향을 끼칠 수 있다. 

정답은 없지만 50~100ms정도의 값이 적당하다는 글을 보았다.

 

재전송은 일어나지 않게 하는 것이 중요한게 아니고, 재전송이 빨리 일어날 수 있도록 해주는 것이 중요하다

-> 환경에 맞는 RTO_MIN값을 찾아서 적용하는 것이 서비스 응답 속도를 향상시키는데 도움이 될 수 있다.

 

 

TCP 세그먼트 구성

- 출발지 포트 정보 2bytes
- 도착치 포트 정보 2bytes
- 시퀀스넘버 4bytes
- Acknowledgement(응답) 넘버 4bytes
- 플래그 2bytes 
	- Tcp header(4bit), reserved(6bit), control flags(6bit)
- 윈도우 사이즈 2bytes
- 체크섬 2bytes
- urgent pointer 2bytes

헤더의 최소 크기 : 20byte

윈도우 사이즈 : 전송할 데이터의 최대 크기

체크섬 : 데이터의 변조를 확인하기 위한 값, 보낸 값과 받은 값을 비교

시퀀스 및 응답 넘버 : 데이터를 보내기전 서버와 클라이언트에서 이루어지는 용청 및 응답 번호

플래그 : 약속된 신호를 남기기 위한 용도로 프로그램에 의해 사용되는 미리 정의된

  (URG : 긴급 포인터, ACK : 응답 메시지, PSH : 데이터를 포함, RST : 수신 거부, SYN : 연결 요청 메시지, FIN : 종료)

 

TCP 3-way handshake

tcp 통신 연결 설정 과정

 

TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정입니다.

client와 server를 연결하기 위해

Client > Server : client가 Server에게 SYN패킷을 보내고

Server > Client : server는 client에게 SYN패킷을 받은 확인 메시지인 SYN+ACN를 보낸다.

Client > Server : client는 server에게 SYN+ACK를 받은 것을 확인하고 ACK를 보냅니다.

이렇게 되면 최종 연결이 ESTABLISHED 됩니다.

 

TCP 4-way handshake

tcp 통신 연결 해제 과정

client가 server와의 연결을 종료하기 위해

Clinet > Server : client가 server에게 FIN패킷을 보내고

Server > Client : server는 client에게 FIN패킷을 받은 확인 메시지인 ACK를 보낸다.

Server > Client : server에서 application이 종료할 준비가 끝나면 FIN 패킷을 client에게 보냅니다.

Client > Server : server에게 FIN패킷을 받고 ACK패킷을 보냅니다.

 

이때 TIME-WAIT 상태가 됩니다.

TIME-WAIT은 연결은 종료되었지만 마지막 종료 확인 메시지를 재전송할 경우를 감안하여 2MSL시간동안 대기하는 시간입니다. (소켓 정보 유지하는 시간)

 

이렇게 되면 client와 server가 완전히 연결이 종료됩니다.

 

Time-Wait 하는 이유 : server에서 FIN을 전송하기 전에 전송한 패킷이 Routing지연이나 패킷 유실로 인한 재전송 등으로 FIN패킷 보다 늦게 도착하는 상황이 발생할 수 있기 때문에 잉여 패킷을 기다리는 과정을 거치게 됩니다.

Time-wait 이 없다면 client에서 세션을 종료시킨 후 뒤늦게 도착하는 패킷이 있다면 이 패킷은 drop되어 데이터는 유실될 것입니다.

 

 

 

UDP

비연결형 프로토콜으로써, 인터넷상에서 서로 정보를 주고받을 때 정보를 보낸다는 신호나 받는다는 신호절차를 거치지 않고 보내는 측에서 일방적으로 데이터를 전달하는 통신 프로토콜입니다.

TCP와 다르게 연결 설정이 없으며, 혼잡 제어를 하지 않기 때문에 TCP보다 전송 속도가 빠릅니다. 그러나 데이터 전송에 대한 보장을 하지 않기 때문에 패킷 손실이 발생할 수 있습니다.

(데이터 그램 방식 사용)

- 비신뢰성 
   ACK를 보내지 않으며 패킷이 그들의 목적지에 도달되는 것을 보장하지 않기 때문에 신뢰성 없는 프로토콜

- 비연결성
   비연결지향적이므로 핸드쉐이킹 과정을 수행하지 않으며, 가상연결도 형성하지 않는다.

- 패킷 순서 X
   순서번호를 사용하지 않는다.

- 혼잡 제어 X
   
- 사용
   스트리밍 비디오와 브로드캐스트 등 신뢰성 있는 전송이 불필요 할 때 사용

- 속도와 오버헤드
   더 적은 자원을 사용하고 TCP보다 빠르다.
   
- 데이터 경계
 	데이터의 경계를 구분함
    
- 통신
	일 대 일(Unicast)통신, 일 대 다(Brodcast), 다 대 다(Multicast) 통신

 

UDP (데이터 그램) 구성

헤더의 최소 크기 : 8byte

- 출발지 포트 정보 2bytes
- 도착치 포트 정보 2bytes
- 전체 헤더의 크기(헤더 + 데이터) 2bytes
- 체크섬 2bytes

 

 

참고

 

https://brunch.co.kr/@alden/15

https://pcmc.tistory.com/entry/190618-TCP-Retransmission

 

 

728x90