Transport service and protocol   


  • 전송하기위한 서비스
  • 어떻게 application layer를 서포트 할 수 있는가
  • Source와 destination사이 연결(edge 시스템들의 연결)
  • application process들 간의 논리적 통신을 제공 - 프로세스들이 동작하는 호스트들이 직접 연결된 것처럼 보인다는 것을 의미
  • Send side : 메시지를 segment 단위로 나누어 전달 - network layer로 전송됨
  • Receive side : 받은 segment를 다시 재구성하여 application으로 넘겨줌



network layer : 목적지까지 얼마나 잘 전달하는지만 다름 - host간의 logical한 커뮤니케이션(transport는 application간의 커뮤니케이션)



TCP

  • reliable(안정적), in-order(알맞은,적합한) delivery(전송)
  • 혼잡 제어 : 딜레이, 손실이 많아지면 그에 대한 1차적 해결책 제시
  • flow control(추후 다룰 내용)
  • 연결 설정 - Source와 destination간의 연결을 해놓고 유지
  • segment로 쪼개서 보낸 메시지들은 순서대로 전송을 했다고 하더라도 network계층에서 서로 다른 경로로 이동하게 되고 이는 곧 receiver가 뒤죽박죽인 순서의 segment들을 받는다는 뜻 이다. -> Transport에서 책임을 지면 TCP, 다른 곳(application)에서 책임을 지면 UDP
UDP
  • 비신뢰적
  • 비연결형
  • 세그먼트를 데이터그램으로 표현
※ IP(인터넷 프로토콜) : 비신뢰적인 서비스
   best-effort : 최선의 노력을 하지만 딜레이나 bandwidth에 대해 어떤 보장도 하지 않는다



Multiplexing/demultiplexing

  • Multiplexing : 출발지 호스트에서 소켓으로부터 데이터를 모으고, 이에 대한 세그먼트를 생성하기 위해서 각 데이터에 헤더 정보로 캡슐화하고, 그 세그먼트들을 네트워크 계층으로 전달 -> transport에서 데이터를 모은 뒤 헤더파일을 추가하여 네트워크로 전달, 전송
  • demultiplexing : 목적지에서 받은 세그먼트들을 조합하여 올바른 소켓으로 전달



 TCP/UDP segment format

  • source port# : 출발지 포트 번호 - 16bit

  • dest port# : 목적지 포트 번호 - 16bit

  • other header fields : 기타 헤더 필드들

  • application data(payload) : 애플리케이션 데이터(메시지)

  • host는 IP address와 port number를 이용하여 적절한 프로세스에 연결


Connectionless demultiplexing

  1. UDP에서 portnumber를 만들어줌

  2. destination의 IP address를 가지고 전송

  3. 세그먼트를 받았을 때, destination port number가 같은지 확인

  4. IP address확인하여 port number만 일치 한 것인지 확인

  • 소스 포트넘버와 목적지 포트넘버를 포함하여 세그먼트를 전송

  • 포트넘버가 겹치더라도 일단 그냥 받고 IP address를 확인


Connection-oriented demux

  • TCP socket의 4가지 식별자 : source IP address, source port number, dest IP address, dest port number

  • 3개의 segment들이 한꺼번에 IP address가 B인 곳에 전송 되면 포트 번호로 구분하여 각각에 맞는 소켓에 연결해줌

 

  • threaded server

  • process들은 완전 독립되어 있어서 어떤 변수도 관여할 수 없지만 한 프로그램 안에서 여러 thread가 관여 할 수 있음

UDP(User Datagram Protocol[RFC 768])

  • loss, delay, segment의 순서바뀜 등의 책임을 일체 지지 않지만 최선을 다해 전송함 -> 모두 application에서 처리

  • 데이터를 보내기만 하면 끝(누구에게서 왔는지 필요 없음) - connectionless

  • TCP는 일반적으로 hand shaking과정을 거친 후 전송을 시도하지만, UDP는 그냥 전송

  • segment들은 각자 독립적으로 처리

  • 사용되는 곳 : Streaming, DNS, [SNMP(Simple Network Management Protocol)-network layer와 소통]

  • 혼잡제어, 연결 등 TCP의 기능은 일체 없음

  • header : 길이,  checksum(가장 간단한 에러 체크), data

  • length : segment의 길이(bytes)

  • checksum : 오류 검출을 제공 - 세그먼트가 출발지로부터 목적지로 이동했을 때, UDP 세그먼트 안의 비트에 대한 변경사항이 있는지 검사

  1. UDP는 세그먼트 안의 모든 16비트 워드 단위로 더하고 이에 대하여 다시 1의 보수를 수행하며, 덧셈 과정에서 발생하는 오버플로우는 '윤회식 자리올림(wrap around) - 가장 하위 비트에 더해줌' 함

  2. 보수를 취하여 1은 0으로 0은 1로 바꿈

 

  1. 수신자는 UDP에서 보낸 checksum과 받은 모든 워드(16비트 단위)들을 더함

  2. 오류가 발생하지 않았다면 모든 자리의 수가 1이 되어야 함

  3. 이 중 하나라도 0이 있다면 패킷에 오류가 발생했음을 알 수 있음

'네트워크 설계' 카테고리의 다른 글

[11월5일]GBN과 SR  (0) 2018.11.14
[10월31일]TCP  (0) 2018.11.04
[10월17일]Domain name System(DNS)  (0) 2018.10.21
[10월15일]Web and HTTP  (0) 2018.10.20
[10월8일]chapter 2 - application layer  (0) 2018.10.14

+ Recent posts