본문 바로가기
대학원 공부/computer science

Network : Transport Layer, UDP, TCP

by 월곡동로봇팔 2019. 12. 17.

우리가 지난 posting에서는 Data link layer는 hop to hop, node to node , Network layer는 host to host 라고 얘기했다.

 

1. Transport Layer


Transport Layer

1.1 Client/Server Paradigm

process to process 통신이 client server 패러다임을 만들었다.

 

여기서 client는 localhost에서 실행되는 process를 말하며, server는 remote host에서 서비스를 제공하기 위해 실행되는 process 다.

 

1.2 전달 방법,

Transport Layer는 Data link layer는 hop to hop, node to node , Network layer는 host to host로 보냈다면, process to process를 한다.

 

이 두 process는 client-server 관계를 말한다.

 

1.3 port 번호

- 정의

process들은 서로 통신을 할 때, MAC, IP, 대신 Port 번호로 통신을 한다.

port 번호는 0-65,535 번호가 이어져있다. 0-1023 까지는 고정되어있는 port 번호들이고 나머지는 우리가 정할 수 있다.

예를 들어, http는 80번, ssh는 22번, DNS는 53번

port 번호
port번호로 통신하기

packet에서 IP 헤더에서 IP가 같은지를 판단하여 그 host로 들어가고, host로 들어간 후, 맞는 process로 들어가야 한다.

 

 

- port 번호 범위 (Internet Assigned Number Authority)

port 번호 범위

1.4 socket Address

Socket

socket address는 IP 주소와 port 번호를 결합한 것을 말한다.

transport layer에서는 client의 socket, server의 socket 두개가 필요하다.

 

1.5 multiplexing, demultiplexing

multiplexing, demultiplexing

sender에서 packet을 보내기 전에, 여러 process에서의 data들을 한번에 multiplexer로 합친 후, 보낸다.

 

1.6 Connectionless vs Connection-Oriented

Connectionless Connection-Oriented
not numbered numbered
no ack ack
do not need reliable need reliable (packet이 traffic 몰리면 packet을 drop)
UDP TCP, SCTP

Transport layer는 packet이 제대로 도착했는지에 대한 부분을 network layer의 자율성 때문에 체크하지 못하기 때문에, 4계층에서 꼭 확인해야한다.

Transport layer에서의 error control

 

2. UDP (User Datagram Protocol)


UDP의 특징

  • unreliable 하다
  • simple한 protocol이며, small message를 보내는데 적합하다.
  • ex) NTP (Network Time Protocol): 분산컴퓨팅, 해킹영역에서 중요하다
  • ex) RPC (Remote Procedure Call)

UDP의 구조

UDP Header

도착이 제대로 했는지 connectionless라 확인하지는 않지만, checksum이 존재해, Data 자체가 손상되지는 않았는지 확인만 한다. (이거 헷갈릴수도 있다.)

 

UDP의 Queue

Queue

  1. client는 OS로부터 임의의 port 번호를 부여받는다.
  2. queue stack을 쌓아, 하나씩 처리한다.
  3. 이를 socket-buffer 라고 부른다.

활용

  • RIP
  • data가 큰 것을 다루는 FTP에는 쓰지 않는다.
  • SNMP

 

3. TCP (Transimission Control Protocol)


정의

TCP는 Flow control, Error Control을 모두 담당한다. 따라서 Connection-Oriented를 지향한다.

 

특징

TCP의 Stream Delivery Service

TCP는 UDP의 비해, Data가 커서 Byte 단위로 Stream Delivery Service가 이루어진다.

위의 관은 실제로 이어진 것이 아니라, Stream Service를 표현하기위한, 가상의 관이다.

 

3.1 TCP Service : Buffer

Buffer

- Buffer??

Buffer란 어떤 장치에서 다른 장치로 데이터를 송신할 때 일어나는 시간의 차이와 데이터의 흐름 속도차이를 조정하기 위해, 일시적으로 데이터를 기억시키는 장치, 즉 한 번에 데이터를 보내면 각각 OS마다 성능이 다를테니, 흐름제어를 위한 임시 메모리 같은 역할을 한다.

 

3.2 Segment

Segment

Data link layer에서는 Frame, Network layer에서는 Packet, Transport layer에서는 Segment라고 불리는 단위로 보낸다.

 

Segment는 TCP가 여러 byte 단위의 data들을 한 packet으로 모으는데, 이 때 여러 byte 단위의 data를 Segment라 한다.

 

3.3. Full-Duplex Service (쌍방향 통신)

TCP는 Full-Duplex 를 지향한다. 이는 sender와 receiver가 동시에 통신을 할 수 있다는 것이다.

 

Piggybacking (꼬리표)

Full-Duplex를 하기 때문에, data를 보내면서 요구했던 data를 잘 받았다는 ack도 같이 붙여서 보낸다.

 

 

3.4 Transport Layer의 철학 두 가지

  • Connection-Oriented Services : sender가 먼저 recevier TCP에 신호를 보낸다. 초기 신호를 받았다면, 서로의 TCP들은 Data를 교환한다. data를 다 보내고, buffer가 비었을 경우, TCP들은 buffer를 없앤다.
  • Reliable Service : TCP는 ack를 사용해서 data가 잘 도착했는지 확인한다.

 

3.5 Byte numbering

TCP에서는 Byte에 numbering이 되면, Segment에 Sequence Number을 붙인다. 즉 data를 나눈 segment들의 번호이다.

Sequence NO로 flow control,  Ack NO로 error control을 한다. Sequence Number은 0-2**32 -1 번호 중임의의 숫자로 판단한다.

 

여기서 Sequence No가 N은 segment에서의 첫 data byte를 의미한다.

Ack No에서의 N+1은 N을 받았으니 N+1을 달라는 의미이다.

 

 

3.6 Segment의 구조

Segment의 구조

UDP에서의 보내는 크기를 보면 TCP에서의 보내는 packet의 크기가 훨씬 크다. (check 할 것이 많기 때문!)

 

window size : 보낼 때, 받을 때 확인하는 window size를 말하며, data link layer에서 같은 개념을 쓴다.

urgent pointer : segment의 데이터 부분, 긴급하고 중요한 정보의 최근 byte를 적어둔다.

 

  • U : Urgent : 긴급한 내용
  • A : Ack : 받았으니 다음 내용을 달라는 의미
  • P : Push : Data를 push
  • R : Rst : reset
  • S : Syn : 처음 Sync, Sequence No를 맞추는데 사용
  • F : Fin : Connection 을 종료한다. (TCP에서는 socket-buffer가 종료한다.)

 

3.7 HandShaking 중요!!!!

Handshaking

  1. Client는 SYN에 해당하는 bit에 1을 넣음으로써 Server에게 seq:8000이라고 임의의 숫자로 Sync를 보낸다. 저기서  A는 잘못된 숫자다. 오류!!!! 빼자
  2. Server는 seq:8000을 요구받았으니, 다음부터는 8001로 보내주세요 라는 Ack를 보내며, Server도 임의의 seq:15000이라는 Sync를 보낸다. -> Syn와 Ack를 동시에 보냄으로써 이는 Full-duplex service라는 것을 알 수 있다.
  3. (그림이 잘못됬으니 위의 그림에서 세 번째 단계는 제외하고, 밑의 그림으로 보자)

Data Transfer

  1. Client는 Syn가 이루어졌으니, ack:8001의 요청으로인해 Server에게 seq:8001부터 9000까지, 9001부터 10000까지 Data를 보낸다. 
  2. Server는 10000까지 받았으니 Ack:10001을 보내고, Seq:15001-17000 까지 data를 보낸다. (저기에 P 단어가 빠졌다.)
  3. 그 다음에는 seq:10000에서 멈춘것은 data를 보내는게 아니라 멈추는 신호를 보내야해서 seq no가 멈춘것이고, ack:17001 부터 달라고 요청하는데 window size를 10000으로 늘려도 된다고 보낸 것이다.

 

결론

1. Transport Layer는 Network Layer의 자율성을 보장하기 위해 Connection-Oriented 를 지향한다. (제일 중요)

2. Flow control (Socket Buffer), Error Control (Ack)을 한다.

3. UDP와 TCP를 사용한다.

'대학원 공부 > computer science' 카테고리의 다른 글

Spark : Partitioning  (0) 2019.12.18
Spark : Introduction Spark  (0) 2019.12.18
Network : Network Layer : Internet Protocol  (0) 2019.12.17
Network : Application Layer  (0) 2019.12.16
Open Source : Elasticsearch & Kibana install  (0) 2019.12.13

댓글