IP Datagram

 

[ IP Datagram ]

 

<왼쪽 위부터 오른쪽 방향으로 차례대로 보시면 됩니다.>

- TCP 헤더 + IP 헤더 = 20 bytes + 20 bytes = 최소 40 bytes의 헤더크기를 가진다

(세그먼트 헤더와 데이터그램 헤더를 합친 값)

 

- Version : IP 프로토콜 버전 번호 ex) IPv4, IPv6

 

- HLEN : Header Length, 세그먼트의 헤더는 제외한 IP데이터그램의 헤더 길이(크기)

 

- Type of Service : 제공하는 서비스의 코드값으로 라우터로부터 받아야할 서비스를 기재하는데 실제로는 거의 사용하지 않는다.

 

- Total Length : 데이터그램의 전체 바이트 길이로, MTU에 제한을 받으며 최대 216제곱 바이트까지 가질 수 있다.

 

- Identification : 패킷들로 분할하는 단편화와 재조합을 위한 16비트의 식별자

 

- Flags : 6종류의 플래그 비트(URG, PSH, RST, SYN, FIN)가 있으며, 각 플래그 비트는 1비트를 가진다. 대표적으로 연결 설정할 때 필요한 SYN, 연결 끊기에 필요한 RST, 연결 해제에 필요한 FIN이 있다.

 

- Fragment Offset : 단편화와 재조합에 필요한 필드이다.

 

- TTL : Time-To-Live의 약자로, 최대 초기화값은 255이다. TTL은 데이터 전달을 확인하고자 최종 목적지에 도착할 때는 TTL=0의 값을 가져야한다. 하나의 지점을 지나갈 때마다 TTL1씩 감소하며, 최종 목적지가 아닌데 0이 되면 오류발생지로부터 출발지에 오류를 보낸다.

 

- Protocol : (UDP인지 TCP인지) 어느 프로토콜인지 알려주는 코드값이다.

 

- Header Checksum : 헤더에 대한 오류검사를 위한 필드로, 검사합(Checksum)은 전체 데이터그램을 합한 값의 1의 보수값이 저장된다. 수신측에서는 검사합과 실제 데이터그램의 합한 값을 더해보고 숫자 0이 들어갔을 경우 오류로 간주한다.

 

- Source IP Address : 출발지 IP 주소(32비트)가 저장된다.

 

- Destination IP Address : 목적지 IP 주소(32비트)가 저장된다.

 

- IP Options (if any) : 옵션이 없으면 헤더값 20바이트로 고정되지만 있으면 헤더값이 가변적일 수 있으므로 헤더 길이를 기재한다. 방문한 라우터들의 리스트를 명시하거나 타임스탬프를 기록한다. 선택적 필드이므로, 옵션을 제외한 나머지 필드는 무조건 있어야 한다.

 

- Padding : 글자 그대로 여백

 

- Data : TCPUDP 세그먼트가 저장되어 있다.

 

 


 

IP 단편화 (Fragmentation), 재조합 (Reassembly)

 

- 네트워크 링크들은 최대 전송 단위(MTU)를 가지는데, MTUFrame(2계층 데이터 단위)의 최대 크기이다.

 

- 단편화(Fragmentation) : 크기가 큰 IP 데이터그램은 망 내부에서 다수의 작은 데이터그램들로 분할된다. 하나의 데이터그램에 딱 한 번만 가능하다.

 

- 분할된 데이터그램들은 각각 독립된 객체로 취급받으며 개별적으로 캡슐화된다. , 분할된 데이터그램들은 각각 별도의 오버헤드가 생긴다.

 

- 재조합(Reassembly) : 최종 목적지에서 분할된 데이터그램들이 재조합되어 하나의 데이터그램이 된다. 따라서 하나라도 순서가 어긋날 경우 나머지 분할된 데이터그램들은 대기해야 한다.

 

- IP 헤더 필드값(Identification)을 보고 분할된 데이터그램들을 식별하여 재조합한다. , 같은 IP 헤더값을 가진 데이터그램들만 재조합한다.

 

- 목적지에서 재조합을 위한 버퍼가 있는데, 분할된 데이터그램들을 저장해놨다가 하나가 손실될 경우 재조합 타이머(Reassembly timer)Time-Out 나면, 출발지에서 재전송한다.



 

 


IP 주소(Addressing)

 

- IP 주소는 32비트 크기로, 호스트와 라우터 인터페이스에 대한 식별자이다.

 

- 인터페이스(Interface) : 호스트 또는 라우터와 통신 링크 사이의 연결을 의미한다.

 

- 라우터는 일반적으로 다수의 인터페이스를 가진다. 여러 개의 서브넷(Subnet)을 연결하는 중심 매체 역할을 하기 때문이다.

 

- 호스트는 일반적으로 하나 또는 둘의 인터페이스를 가진다.

 

- IP 주소는 각 인터페이스와 연관된다.

 

- 인터넷 네트워킹은 많은 서브넷(부분적인 네트워크)이 모인 전체 네트워킹이다. 같은 서브넷에 속한 인터페이스의 IP 주소는 앞부분이 똑같다. 이 앞부분을 Subnet Prefix라고 한다.

 

- 같은 서브넷끼리는 라우터를 거치지 않는다. 라우터는 서로 다른 서브넷들을 연결하기 때문이다.

 


 

 

사이더(CIDR)

 

- Classless Inter Domain Routing의 약자로, 클래스 없는 도메인 간의 라우팅 기법이다.

 

- 기존의 도메인은 Class A, Class B, Class C, Class D, Class E 로 나누어져 각기 다른 형식을 가진 주소로 이루어져있는데, 클래스 A, B, C까지는 유니캐스트(unicast) 주소이고, 클래스 DE는 멀티캐스트(multicast) 주소이다. IP주소 중 n 비트까지는 network 주소가 들어가고 나머지는 다른 주소가 들어가는 등의 방식으로 주소가 다양하다.

 

- 사이더는 최신의 IP 주소 할당 방법으로 기존의 IP 주소 할당 방식인 네트워크 클래스를 대체한다.

 

- IP 주소의 영역을 여러 네트워크 영역으로 나눌 때 기존방식에 비해 유연성을 더한다. 특히 IPv4 주소가 급격히 부족해지고 있으므로 해당 버전보다 효율적으로 사용하게 해준다.

 

- 접두어(Subnet Prefix)를 이용한 주소 지정 방식을 가지는 계층적 구조(Host IP < Subnet < Internet)를 활용하여 인터넷 광역 라우팅의 부담을 줄여준다. 여기서 사용하는 접두어는 Subnet에 포함되는 호스트 IP들을 대표하는 역할을 한다. 개개의 IP주소들을 포워딩 테이블에 저장하게 되면 탐색시간이 너무 길어진다는 문제점(광역 라우팅)을 해결한다.

 

- CIDR은 IP 주소를 Subnet portion(네트워크 주소) 부분과 Host portion(특정 호스트 주소) 부분으로 나눈다

 

- 표기 방식은 a.b.c.d/x (실제로는 문자가 아닌 숫자) 인데, 여기서 x는 Subnet portion의 비트 수이다.






IP 주소 할당(DHCP)

 

- IP 주소를 할당하는 방식에는 WindowsUNIX에서 두 가지가 있다.

  • 직접 설정하여 고정된 IP 주소를 가지는 방법

  • DHCP를 통해 동적으로 할당받는 방법

- 직접 고정된 IP 주소를 설정할 경우 주소의 비효율적인 사용이 되기 때문에 대부분 동적할당방법을 선택한다.

 

- DHCP : Dynamic Host Configuration Protocol의 약자로, 동적 호스트 구성 프로토콜을 의미한다. 클라이언트가 네트워크 관리자(DHCP 서버)에게 주소가 필요하다는 요청을 보내면 DHCP 서버에서 중앙에 관리하던 IP 주소들 중 하나를 클라이언트에게 동적으로 할당해준다.

 

- DHCP는 사용자들이 자주 바뀌는 환경(학교나 기업 등)에서 유용하다.

 

- 동적으로 할당한다.”는 의미는 사용 가능한 IP주소보다 더 많은 호스트(클라이언트)가 있는 경우에 IP 주소의 할당시간을 짧게 하여 네트워크를 동적으로 재구성할 수 있음을 뜻한다.

 

- 웹서버와 같이 영구적인 IP주소를 필요로 할 경우 정적인 주소를 제공한다.

 

- DHCP를 사용하는 목적

  • 호스트가 네트워크에 접속할 때 서버로부터 IP 주소를 동적으로 획득한다.

  • 네트워크에 연결되었을 때만 주소를 가지므로 연결이 안되어있을 때, 다른 클라이언트가 주소를 재사용할 수 있다.

  • 짧은 시간 동안에 네트워크에 연결되는 모바일 사용자(스마트폰, 태블릿 등)를 지원한다.

- DHCP 동작

  • 호스트는 DHCP 서버 발견(DHCP discover) 메시지를 브로드캐스트(broadcast)방식으로 발송
  • DHCP 서버는 DHCP 제공(DHCP offer) 메시지로 호스트에게 응답
  • 호스트는 DHCP 요청(DHCP request) 메시지로 IP 주소를 서버에 요청
  • DHCP 서버는 DHCP ACK 메시지로 호스트가 사용할 IP 주소를 전송

 

- 브로드캐스트 방식으로 소통하는 이유 : 맨 처음에 서버가 하나 이상일 수 있어서 통신할 서버의 주소를 모르기 때문에 호스트는 목적지 IP주소란에 브로드캐스트 주소를 넣어 메시지(데이터)를 보낸다. 이후, 서버로부터 받은 메시지(데이터)에서 서버의 주소를 알게 된 후 그 주소로 메시지를 보내면 2계층에서 오버헤드(MAC주소추가) 되었을 때 ARP 프로토콜이 처음 소통했던 서버의 주소와 다른 것으로 인지하고 중간에 데이터를 버린다. 브로드캐스트가 아닌 다른 IP 주소의 MAC주소가 2계층에서 추가되므로 서버 발견 메시지를 보냈을 때와 DHCP 요청 메시지를 보낼 때의 목적지 IP주소가 달라지기 때문이다. , 브로드캐스트로 통신을 시작했기 때문에 시작할 때와 다른 주소를 사용하여 데이터를 보내면 데이터는 버려진다.





▶ 인터넷 서비스 제공자(ISP)


- 인터넷 서비스 제공자(Internet Service Provider, ISP)에 의해 계층적으로 IP주소가 관리되어 라우팅 정보를 효율적으로 알린다. 여기서 효율성이란 포워딩 테이블에서 주소를 검색하는 시간을 짧게 하는 것을 의미한다


- 서브넷(Subnet) : 어떤 기관에 소속되어 있지만 분리되어 하나로 인식될 수 있는 네트워크망을 의미한다. 범위는 근거리 통신망 내에 속하는 모든 호스트들이 될 수 있다.



- 포워딩 테이블에서 Entry 수는 서브넷(Subnet)을 대표하는 라우터의 개수인데개개의 호스트들의 IP주소를 엔트리로 하면, 포워딩 테이블에서 주소를 탐색하는 시간이 길어지기 때문에 대표 라우터의 IP주소로 테이블을 구성하여 테이블 크기를 줄여서 탐색시간을 짧게 한다.


- 즉ISP가 계층적으로 주소를 관리하므로, 해당 서브넷에 해당하는 IP주소를 알리면 인터넷(Internet)에 연결되어있을 때 해당 Subnet에 포함되는 IP주소의 호스트와 통신할 수 있게 된다.

 

- ISPSubnet을 알 수 있는 방법은 인터넷 관련 최상위 기관인 국제인터넷주소관리기구(Internet Corporation for Assigned Names and Numbers, ICANN)에 의해 정보를 제공받기 때문이다. ICANN은 인터넷 DNS의 기술적 관리, IP 주소공간 할당, 프로토콜 관리, 루트 서버 시스템 관리 등의 업무를 조정한다.

 

 


 

▶ 네트워크 주소 변환(NAT)

 

- 네트워크 주소 변환(Network Address Translation, NAT)은 수많은 Subnet으로 이루어진 광범위한 네트워크에서 통신하기 위해 사용된다.

 

- Subnet 내부 통신의 경우 : private 제한을 가지는 홈 네트워크 같은 로컬 네트워크에서 데이터를 주고받게 된다. 이 때 라우터를 거치지 않고 자신의 IP주소를 사용한다.

 

- Subnet 외부 통신의 경우 : 자신의 IP와 같은 IP주소가 다른 Subnet에 있을 수 있기 때문에 라우터를 거쳐 갈 때 단 하나의 NAT IP주소로 변환되어 통신을 하게 된다. 당연히 통신을 하는 상대의 IP주소도 NAT IP주소로 변환된 것이다.


[ 라우터를 기준으로 좌 외부 통신(Internet), 우 내부 통신 ]



[ 라우터(NAT)를 기준으로 좌 내부 통신, 우 외부 통신(Internet) ]


- NAT IP주소로 변환되는 과정에서 IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하게 되는데, 패킷에 변화가 생기는 것이므로 IPTCP/UDP의 체크섬도 다시 계산된다. 이는 호스트 간의 통신에 복잡성을 증가시키는 것으로 네트워크 성능에 영향을 준다.

 

- 그럼에도 NAT IP주소로 변환하는 이유는 위에서도 언급했듯이 광범위한 네트워크에서 쉽고 빠른 통신을 위해 여러 개의 호스트가 하나의 공인 IP주소를 사용하여 인터넷에 접속하기 위해서이다.

 

- 다시 말해, 복잡성이 증가함에도 공인 IP주소를 사용하는 것은 여러 호스트에서 하나의 IP 주소를 공유함으로서 라우터의 탐색 시간을 줄여 보다 빠르게 통신하기 위해서이다.


- NAT 전의 ISP는 Subnet에 포함되는 IP 주소들(사설 IP)의 시작주소(Subnet Prefix)를 알렸는데, 여기서는 NAT에 의해 변환된 단 하나의 공인 IP주소(NAT IP주소)를 사용함으로서 ISP로부터 호스트별 주소를 할당받지 않고 단 하나의 IP주소만을 할당받는다.

 

- 공인 IP주소는 Subnet 외부의 통신을 위해 할당받는 것이기 때문에 로컬 네트워크에서 호스트의 주소를 바꾸게 되어도 Subnet 외부에는 알려지지 않는다. 그 외 다른 정보도 외부로부터 숨겨질 수 있어서 보안성이 더해진다.

 

- 로컬 네트워크에서는 기기의 주소를 바꾸지 않고, ISP만 바꾸는 것도 가능하다.

 

- NAT은 변환 테이블(Translation Table)을 통해 기존의 IP주소 및 포트번호와 대응되는 NAT IP 주소 및 새로운 포트 번호를 기억한다.

 

- 끝으로, NAT 라우터는 무조건 들어오고, 나가는 데이터그램의 헤더에 저장된 IP 주소, 포트 번호와 대응되는 NAT IP 주소, 새로운 포트 번호로 변환해야한다.






 

 

Reliable Data Transfer(신뢰성 있는 데이터 전송, 이하 RDT)

 

- 현재까지 송수신간의 신뢰성 있는 데이터 전송 프로토콜을 개발해왔고, 단계적으로 그 과정을 살펴볼 것이다.

 

- 단방향 데이터 전송만을 고려해왔으나 제어 정보는 양방향으로 전송한다.

 

- RDT에서는 송신자와 수신자를 명시하기 위해 유한 상태 머신(Finite State Machines, FSM)을 사용한다.

 

[FSM]

 

 

 

RDT 1.0

 

- 신뢰성 있는(오류 없는) 채널에서 신뢰적인 데이터 전송

 

- 하위 채널에 비트 오류가 없고 패킷(3계층 데이터 단위)의 손실이 없다.

 

- 송신자와 수신자가 분리된 유한 상태 머신을 가지고 있다.

 

- 송신자가 데이터에 헤더를 씌워 패킷으로 만들어 하위 채널로 데이터(패킷)를 전송하면, 수신자는 하위채널로부터 데이터를 받는다.

 

[ 각 2개의 상태를 가지고 있음 ] 

 

 

RDT 2.0

 

- 하위 채널이 패킷에 비트 오류를 일으킬 가능성이 있다.

 

- 해결책으로 헤더에 설정한 체크섬(Checksum)을 통해 오류를 검출한다.

 

- RDT 1.0의 오류복구 기능 : 수신자의 피드백 ACK, NAK

  • Acknowledgements (ACK) : 수신자가 송신자에게 패킷이 잘 도착했음.“을 알리는 방식으로 송신자는 수신자로부터 ACK를 받으면 다음 패킷을 전송한다.
  • Negative Acknowledgements (NAK) : 수신자가 송신자에게 패킷에 오류가 발생했음.“을 알리는 방식으로 송신자는 NAK를 받는 즉시 오류 패킷을 재전송한다.

- 문제점 : ACK/NAK에서도 오류가 발생할 수 있다.

  • 수신측이 보낸 ACK/NAK에 오류가 발생하여 송신측이 계속 기다리게 된다.
  • 송신측에서 오류가 났는지 모르고 있으며, 패킷을 재전송할 수 없다.
  • 송신측에서 중복패킷을 전송할 경우 수신측은 중복수신을 하게 된다.
  • , 비효율적인 링크 사용이 증가한다.

 

 

 

RDT 2.1

 

- RDT 2.0의 해결책 : 각각의 패킷에 순서번호(Seq#)를 추가한다. 그러면 수신측에서 순서번호가 같은 패킷(중복패킷)을 버리게 되므로 중복수신이 방지된다.

 

- 송신자의 입장

  • 패킷에 순서번호(0, 1) 추가 : 패킷은 0->1->0->1번의 순서를 가진다. , 01의 상태로 기억된다.
  • 수신된 ACK/NAK의 오류 여부에 대한 상태가 추가되어 RDT 2.0보다 상태 수가 2배 증가하므로 총 4개의 상태를 가진다.

- 수신자의 입장

  • 순서번호로 중복 패킷의 유무를 조사한다.
  • 마지막으로 보낸 ACK/NAK가 송신측에서 제대로 받았는지 알지 못한다.

 

 

 

RDT 2.2

 

- NAK가 없는 채널에서의 신뢰적인 데이터 전송

 

- NAK가 없다는 점을 제외하고 RDT 2.1의 기능과 같다.

 

- 수신자는 마지막에 올바르게 수신된 패킷의 ACK를 송신자에게 전송한다.

 

- ACK에는 패킷의 순서번호가 포함된다.

 

- 송신자가 중복된(동일한 순서번호의) ACK를 받을 경우 현재 패킷을 재전송한다.(NAK를 받았을 때와 같은 동작)

ex) 송신측에서 ACK 0번을 기다리는데 ACK 1이 올 경우 순서번호 0번의 데이터를 재전송한다. 그 이유는 1번 데이터는 받았으나 0번 데이터를 못받았기 때문이다.

RDT 2.0 

RDT 2.1 


성공수신 -> ACK


중복수신 or 수신실패 -> NAK 


성공수신 or 중복수신 -> ACK 




RDT 3.0

 

- 하위 채널에서의 패킷들(데이터, ACK)의 손실을 고려하였으며, 체크섬 ,순서번호, 재전송 모두 도움은 되나 근본적인 해결이 충분치 않다고 판단

 

- 카운트다운 타이머

  • ACK를 계속 기다리는 것이 비효율적이므로 송신자가 ACK에 대해 충분한 시간을 갖고 기다린다
  • 그러나 해당 타이머 안에 못 받으면(타임아웃되면해당 순서번호의 패킷을 재전송한다.
  • , 패킷이 손실되지 않고 지연되어 송신측이 똑같은 패킷을 재전송하면 중복패킷이 되나 순서번호로 이 문제를 해결할 수 있다. 순서번호가 같으면 수신측에서 드랍하기 때문이다.
  • , 수신자는 ACK 패킷의 순서 번호를 송신자에게 알려야 한다.

- 네트워크 프로토콜이 물리적 자원의 사용을 제한한다. 따라서 재전송을 원하는 만큼 할 수 없다.

 

- 기능적으로 잘 동작하지만 성능은 만족스럽지 못하다.

 



▶ 파이프라인 프로토콜(Pipelined Protocols)


- 배경 : RDT 3.0의 Stop-and-Wait 방식으로 인해 데이터가 많을 경우 대기 시간때문에 링크가 비효율적이게 사용되는 것의 해결책으로 나옴


- 송신자가 ACK의 응답을 받지 않고 다수의 패킷을 전송 (링크의 효율성 증가)

(즉, 송신자는 파이프라인에 최대 N개까지 ACK받지 못한 패킷들을 전송 가능)


- 순서번호 증가, 송신자와 수신자 사이에 패킷을 버퍼링해야함.


- GBN(Go-Back-N)

  • 수신자는 누적된(cumulative) ACK만 전송 (수신된 패킷들의 순서번호 사이에 갭이 있으면 ACK는 응답하지 않음)
  • 수신자는 비순차(out of order) 패킷으로 버퍼링하지 않는다.
  • 송신자는 ACK받지 못한(문제가 생긴) 가장 오래된 패킷부터 모두 재전송 (타이머가 1개)

- Selective Repeat(선택적 반복)

  • 수신된 패킷들 사이에 갭이 있더라도 갭 이후의 패킷들을 수신측에 있는 버퍼에 저장
  • 즉, 수신자는 모든 패킷들에 대해 개별적으로 ACK 응답
  • 상위 게층에 순차적으로 전달하기 위해 비순차 패킷들을 버퍼에 저장
  • 비순차 패킷 -> 순차적으로 정렬 -> 상위 게층으로 전달
  • 송신자는 개별 패킷마다 타이머를 가지고 있다.
  • 문제가 생긴 패킷만 개별적으로 재전송

- TCP는 위 두개의 경우가 하이브리드된 형태로 사용한다.

 

 

전송 서비스와 프로토콜(4계층)

 

- 다른 호스트들이 계속 네트워크에 머물도록 응용 프로세스 간의 논리적 통신을 제공한다.

 

- 전송 프로토콜(Transport Protocol)은 종단점(end-system)에서 적용된다.

  • 송신 호스트 : 데이터 메시지를 세그먼트로 분해하여 네트워크 계층(3계층)으로 전송한다.
  • 수신 호스트 : 세그먼트들을 데이터 메시지로 재조립하여 응용 계층으로 전송한다.

 

- TCPUDP가 대표적인 전송 프로토콜이며, 그 외에도 많이 이용된다.

 

- Throughput(스루풋, 처리율) : 네트워크 통신에서 노드 사이 또는 파이프 사이에서 전달되는 단위 시간당 전송되는 디지털 데이터 처리량. 주로 초당 비트수(bps)가 사용된다.

 

 


Transport VS Network Layer

 

- Network Layer(네트워크 계층, 3계층) : 호스트들 간의 논리적 통신을 돕는다.

 

- Transport Layer(전송 계층, 4계층) : 응용 프로세스 간의 논리적 통신을 돕는다.

 

- 네트워크 계층부터 하위 계층(1~3)들은 하드웨어적인 통신을 많이 다루고, 전송 계층부터 상위 계층(4~7)들은 소프트웨어적인 통신을 많이 다룬다.

 

 


인터넷 전송계층 프로토콜

 

- Transmission Control Protocol (전송 제어 프로토콜, 이하 TCP)

  • 신뢰성 있고, 순서가 보존되는 전송 시스템
  • Congestion Control(혼잡 제어), Flow Control(흐름 제어), Connection Setup(연결 설정) 등 각종 오류를 제어한다.
  • 웹 브라우저들이 월드 와이드 웹에서 서버에 연결할 때 사용되며, 이메일 전송 및 파일 전송에도 사용된다.

- User Datagram Protocol (사용자 데이터그램 프로토콜, 이하 UDP)

  • 신뢰성 없고, 순서가 보장되지 않는 전송 시스템
  • 꼭 필요한 기능(전송)만 하고, 오류 제어와 같은 추가 기능을 필요로 하지 않는 애플리케이션에 사용된다.
  • 추가 기능이 없기 때문에 오버헤드가 작고 지연 시간이 짧다는 장점이 있다.

- 이용되지 못하는 서비스 : 시간 및 대역폭이 보장되지 않으므로 스루풋도 보장되지 않는다.

여기서 보장되지 않는다.”는 것은 1초에 100개와 같이 딱 떨어지지 않음을 의미한다.

 

 


Multiplexing & Demultiplexing

 

- 네트워크 소켓 (Network Socket) : 컴퓨터 네트워크의 사이에 있는 프로세스 간 통신의 종착점이다. 컴퓨터 간 통신의 대부분은 IP(인터넷 프로토콜)을 기반으로 하고 있고, 네트워크 소켓의 대부분은 인터넷 소켓이다. 네트워크 통신을 위해서 송,수신측에서는 소켓을 생성하고, 이 소켓을 통해 서로 데이터를 교환한다.

 

- Multiplexing(다중화) at Sender : 다수의 소켓들로부터 추가 정보(목적지 주소 등)를 얻어서 전송할 데이터의 헤더에 해당 정보(목적지 주소 등)를 추가하는 기능.

 

- Demultiplexing(역다중화) at Receiver : 수신된 데이터를 적절한 소켓으로 전달하기 위해 헤더 정보를 이용한다. 하위 계층에서 상위 계층으로 올라갈 때마다 헤더가 작아지면서 전송할 데이터가 목적지에 도착한다.

 

 


▶ 역다중화 과정

 

- 호스트는 IP 데이터그램(datagram)을 수신한다.

  • 각각의 데이터그램 출발지 IP주소, 목적지 IP주소를 가지고 있다.
  • 각각의 데이터그램은 하나의 전송계층 세그먼트를 옮긴다.
  • 각각의 세그먼트는 출발지, 목적지 포트번호(16bits)를 가지고 있다.

- 호스트는 IP주소와 포트번호를 이용하여 세그먼트를 적절한 소켓으로 안내한다.

 

- IP Datagram


- TCP의 Segment

 

- IP 데이터그램이 세그먼트를 포함하고 있다.



- 데이터 전송 과정


- 비연결형 통신, UDP의 소켓

  • 생성된 소켓은 호스트 로컬 포트 번호(source port #)만 가지고 있다.
  • 호스트가 UDP 세그먼트를 받으면, 세그먼트에 있는 목적지 포트 번호를 확인한다.
  • 해당 포트 번호로 세그먼트를 안내한다.
  • 만약 서로 다른 출발지 IP주소, 포트 번호이지만 같은 목적지 포트번호나 IP주소를 가진 IP datagram을 받으면 목적지에서 같은 소켓으로 데이터가 전송된다.

- 연결 지향형 통신, TCP의 소켓

  • 출발지 IP주소, 포트번호와 목적지 IP주소, 포트번호의 네 가지 요소로 소켓이 생성되어진다.
  • 수신자는 세그먼트를 적절한 소켓으로 안내하기 위해 네 가지 값 모두 이용한다.
  • 송신 호스트는 동시에 많은 TCP 소켓들을 지원할 수 있다. 단 각각의 소켓들은 각자 네 가지 요소를 가진며, 이를 통해 소켓이 구분된다.
  • 웹 서버(송신자)는 각각의 클라이언트를 연결하기 위해 다른 소켓들을 가진다.

 

 

UDP(User Datagram Protocol)

 

- 추가 기능(오류제어)이 없고, 꼭 필요한 기능만 있는 인터넷 전송 프로토콜

 

- 세그먼트가 손실될 수 있고, 순서가 뒤바뀔 수 있다.

 

- 송수신 간의 연결 설정(Handshaking)을 하지 않는다.

 

- 각각의 UDP 세그먼트는 독립적으로 다루어진다.

 

- 연결 설정이 필요 없는 짧은 메시지를 주고받을 때 사용된다.

 

- 실시간이 중요한 스트리밍 멀티미디어와 같은 응용프로그램, 도메인 네임 서버(DNS) SNMP에 이용되어진다

 

- 애플리케이션 맞춤형 오류 회복이 추가되면서 UDP를 통한 신뢰성 있는 데이터 전송이 가능해졌다.


 - UDP 세그먼트

  • 세그먼트의 길이를 두는 이유는 가변적 길이므로 끝이 어딘지 찾기 위해 필요로 한다.
  • 송수신간의 연결 설정을 나타내는 연결 상태가 없으므로 단순한 구조이다.
  • 8바이트라는 작은 헤더 크기를 가진다.
  • UDP는 원하는 만큼 빠르게 전송할 수 있어서 혼잡 제어(Congestion Control)이 발생하지 않는다.

- Checksum(검사합) : 중복 검사의 한 형태로 오류 검출을 위한 기능을 한다.

  • 송신자는 헤더 필드가 16비트의 정수를 나열한 것으로 간주하고, 세그먼트들의 합의 1의 보수를 취한 결과(체크섬 값)UDP 체크섬 필드에 저장한다.
  • 수신자는 받은 세그먼트 값들의 합과 체크섬 값(결과)을 더한다. 만약 계산된 체크섬이 체크섬필드의 값과 같다면 더했을 때 비트값이 전부 1인 패턴이 나와야한다. 0이 하나라도 있으면 에러가 발생한 것이다.
  • 아래는 체크섬의 예시이다.

 

다음과 같이 4 바이트의 데이터가 있다고 치자: 0x25, 0x62, 0x3F, 0x52

1 단계: 모든 바이트를 덧셈하면 0x118이 된다.

2 단계: 1바이트의 절반(4비트, 이하 니블)을 버림으로써 0x18을 만든다.

3 단계: 0x181의 보수를 얻음으로써 0xE8을 얻는다. 이것이 체크섬 바이트이다.

체크섬 바이트를 테스트하려면 원래 그룹의 바이트에 체크섬 바이트까지 모두 더하면 0x200이 된다.

다시 니블을 버림으로써 0x00이 된다. 0x00이라는 뜻은 오류가 없다는 뜻이다. (하지만 오류가 있어도 우연히 0x00이 될 수도 있다.)

 

+ Recent posts