CS

[네트워크] 5. Transport Layer

닿다라다나닷 2023. 12. 8. 17:22

목차

     

     

    Transport services and protocols

    프로세스(실행되는 프로그램)과 프로세스간의 통신

    sender 송신자는 애플리케이션 레이어에서 받은 메시지를 세그먼트로 분할하고 네트워크 계층에 전달

    receiver 수신자는 받은 세그먼트를 메시지로 재조립하고 애플리케이션 계층에 전달

     

    네트워크 레이어 : host 간의 통신

     

    TCP / UDP

    차이점? sender와 receiver 사이의 통신을 할때

    • TCP : 양측에서 사전에 통신을 하겠다고 약속을 하고 통신
    • UDP : 약속 없이 무작위로 송신

    소켓 socket : 버퍼의 역할을 하는 포트를 구별하는 역할, 세그먼트화 된 데이터를 소켓을 통화하여 프로세스에 전달.

     

    Port # : 하나의 PC에서 각 프로세스를 구별하는 방법.

    • 16 bit, 0~2^(16-1), 6만5천개
    • 프로세스마다 포트를 지정
    • 세그먼트의 포트넘버를 구분해서 전송

    다중화 Multiplexing 멀티플렉싱 : 여러개의 세그먼트를 동시에 받는 과정. 포트를 구별해주어 동시에 송수신이 일어나도록 함 ⇒ 합치기

    역다중화 Demultiplexing 디멀티플렉싱 : 하나의 신호를 여러개의 세그먼트트로 분리하여 보내는 과정 ⇒ 쪼개기

    segment format

    1. source port #
      • sender port # 정보를 가지고 있음
      • 16 bit
    2. dest port #
      • receiver port # 정보를 가지고 있음
      • 16bit

    응답시 둘 정보가 교체됨

    TCP는 source IP address, dest IP address 포함

    example (UDP → dest port #)

    TCP = 연결지향형 connection oreiented

    소켓 간의 1대1통신. 복잡하지만, 신뢰성이 높음

    통신이 실제로 진행되기 전, 송신자가 수신자에게 확인메시지를 날리고, 응답하고, 미리 통신을 약속함 → handshaking

    소켓 식별정보 4가지

    1. source IP address
    2. source port number
    3. dest IP address
    4. dest port number

    receiver은 4가지 정보를 가지고 세그먼트를 적절한 소켓에 전송. 포트넘버도 사용해 정확한 프로세스를 식별함

    기능

    • 혼잡 제어 congestion control : 라우터와 주변 호스트들 사이에 패킷이 많이 몰리면 혼잡도가 크다고 판단, 데이터 size를 줄인다.
    • flow control : 패킷이 몰리면서 수신자와 송신자 사이에 속도의 차이가 생기면, 속도를 조절함

    example (TCP)

    UDP = 연결 없음 Connectionless

    하나의 소켓으로 모두 통신

    no handshaking,  과정 간단 단순, header 필드 작음(TCP에 비해),신뢰성 다소 떨어짐

    과정

    • sender : 캡슐화 Encapsulation
      1. application에서 transport layer가 메시지를 받아서 여러개의 세그먼트로 쪼갬
        • 소켓을 통과해 전송계층으로 전달하는 과정 multiplexing
      2. UDP 헤더를 추가해 세그먼트 만듬
      3. 네트워크 레이어로 전달, receiver 세그먼트 받으면
      4. 헤더의 포트# 보고 적절한 프로세스에 전달
    • reciever : 역캡슐화 Decapsulation
      1. network 레이어에서 전송된 데이터그램이 헤더를 제거해 세그먼트화
      2. 세그먼트 내부 헤더의 포트넘버를 보고 소켓을 전송하고
      3. 소켓을 통해 application 레이어로 전송
        • 적당한 소켓으로 전달하는 과정 Demultiplexing

    서버 ⇒ 자신의 IP, Port #

    클라이언트 ⇒ 자신의 IP, Port # + 서버의 IP, Port #   4개를 다 알아야 서버에게 접근이 가능함

    UDP segment format

    ⭐TCP : Transmission Control Protocol

    point to point

    • 소켓끼리 ptop ⇒ 물리적으로 ptop 아님, multicasting 불가능
    • src IP, src port, dest IP, dest port
    • 한 pc 다른 프로세스 구분 → 소켓이 다르기 때문
    • 신뢰성
    • 양방향 통신

    TCP segment format

    헤더의 길이 최소(4줄) 20byte ~ 최대(4줄 + options) ~ 60byte

    1. src port #(16bit), dest port #(16bit)
    2. sequence number : 쪼개진 세그먼트 순서 번호 필드, 재조립시 사용, 랜덤숫자 부여, 연속적
    3. acknowledgement number : 확인용 응답 번호 필드, 시퀀스 넘버 + 데이터길이 누적. 다음 받게 될 시퀀스 넘버
    4. Flag : 1bit 크기로 세그먼트 연결 상태 파악, 활성화1 없으면0
      •  맨앞 빈칸 offset 필드 : head len 길이. option을 포함한 가변 헤더 길이 표현함
        • 4bit. 0000~1111 * 4 ⇒ 0~60가지의 숫자
      • A : ACK. acknowledgement number 필드가 유효하다. 성공적으로 도착한 데이터에 대한 확인 응답
      • R : Reset. TCP 연결을 강제로 초기화
      • S : Synchronize. 이 플래그로 sender와 receiver는 sequence number를 동기화함
      • F : Finish. 연결의 종료. 연결을 종료하고 싶은 클라이언트가 F 플래그=1 송신하면 받은 서버는 ACK를 반환하고, ack를 잘 받았다는 마지막 메시지를 서버에 전달하면 연결 종료를 확인한다.
    5. checksum : 오류검출
    6. options : 헤더의 가변적 길이. 0~40byte. 

    3-way handshake : connection-oriented

    connection 확인하는 과정. 데이터 교환 전에 송수신자의 상태를 초기화한다.

    handshaking 이 완료되면, 데이터를 송수신한다.

    lost ACK 발생할 경우 → timeout을 설정해 응답을 일정시간만큼 기다리고, ACK 응답이 오지 않으면, 패킷이 손실되었다고 판단하고 데이터를 재전송한다.

    송신자와 수신자 사이에 논리적인 연결을 설정하는 것

    1. SYN 동기화 단계
      • 클라이언트가 서버에 SYN Flag = 1 을 보내 연결을 요청
      • 클라이언트의 초기 시퀀스 Seq 번호 x가 포함됨
    2. SYN-ACK 동기화 확인 단계
      • 서버는 SYN 패킷을 받고, 클라이언트에게 SYN Flag = 1ACK(확인) Flag = 1을 동시에 보낸다
      • 서버의 초기 시퀀스 번호 y, 클라이언트의 시퀀스 번호 x+1, 누적
    3. ACK 확인 단계 : ACK메시지 잘 받았다고 서버에 알려줌
      • 클라이언터는 서버의 SYN-ACK 패킷을 받고, 서버에 ACK Flag = 1 패킷을 보낸다
      • 서버의 시퀀스 번호 y+1

    Example scenario