TCP [1]

임승섭·2023년 6월 8일
0

Computer Network

목록 보기
24/27
post-thumbnail

TCP

transmission control protocol

  • connection-oriented protocol
    • connection setup
    • connection teardown
  • reliable delivery
    • message가 destination process까지 에러 없이 전달된다.
    • message가 순서대로 전달된다.

TCP

TCP is stream delivery service

  • TCP delivers data as a stream of bytes
  • Each byte is numbered
  • Send buffer and receive buffer
    • TCP 내에 buffer에 먼저 쓰고, 버퍼 체크 후 보낸다
    • 둘은 서로 independent
  • TCP segment : a portion of byte stream + TCP header
    • packet과 비슷한 개념
    • segments라고 불린다.

TCP Connection

  • TCP는 connection oriented protocol이다
  • 연결을 맺으면 양방향이다. (bi-directional)
  • SYN : connection setup
    FIN : connection teardown

TCP Numbers

Byte number

  • byte stream에 있는 각 byte는 byte nubmer를 갖는다
  • stream의 첫 번째 byte는 0부터 (2^32-1) 사이의 랜덤값을 할당받는다
    그 숫자부터 시작해서 하나씩 커진다
  • 만약 byte stream이 6000 bytes를 갖고,
    random number가 1057로 설정되었으면,
    bytes are numbered from 1057 to 7056

Sequence number

  • 각 TCP segment는 sequence number를 갖는다
  • sequence number는 segment에 carry된 first byte의 byte number이다
    (뭔소리야 이게..)
  • TCP connection이 5000 bytes를 보내야 하고,
    byte number의 first byte는 10,001이다.
    byte stream은 5개의 같은 size segment로 나눠질 때,
    segment들의 sequence number를 찾아라

Acknowledge number

  • receiver가 segment를 받으면, TCP-ACK message를 보내줘야 한다.
  • ACK message 안에, receiver는 acknowledge nubmer를 포함시킨다.
  • Acknowledge number
    : the byte number of the last byte receiver received
    without missing bytes
    + 1
    • 다음번에 내가 받아야 하는 number
    • "next expected byte"
  • ack number가 5643이라는 건,
    receiver가 5642로 시작하는 모든 byte를 정상적으로 받았다는 뜻이 된다.
  • byte stream이 101부터 시작하고,
    receiver가 받은 byte가 101, 102, 103, 106, 107, 110이면,
    next expected byte는 104이다.

TCP Functions

  • flow control /congestion control -> 왜 에러가 발생하는가
    layer 2에서, 이더넷 와이파이 : 재전송을 해준다
    근데 layer 4에서 또 재전송을 할 필요가 있나?
    • layer 2에서의 오류 검출 : 빨간색 부분. 이런 오류를 체크할 수 있어
      근데 아무리 여기서 체크를 해도, 검정색 부분(queue가 가득 차서 router가 패킷 drop, ...)은 layer 2의 재전송 기능으로 해결할 수가 없다.
      그래서 TCP에서는 reliable한 기능이 필요하기 때문에 layer 4에서 또 재전송하는 기능이 필요하다.
  • error control -> 에러 발생하면 재전송한다

Flow control

  • receiver가 receiving bytes를 잘 다룰 수 있도록 sending speed를 제어한다.
    • 중간 router에서 막히면 병목 현상이 발생할 수 있다

Congestion control

  • level of network congestion에 따라 sending speed를 제어한다.

Error control

  • erroneous segments are retransmitted for reliable delivery

TCP Header

  • No option으로 20 bytes
  • option으로 maximum 60 bytes

Source port / Destination port

  • 16 bits (UDP와 동일)

Sequence number

  • 32 bits
  • segment의 first byte의 byte number
  • sender가 receiver에게

Acknowledge number

  • 32 bits
  • receiver 입장에서 next expected byte
  • receiver가 sender에게

HLEN

  • header length
  • 단위 : 4 bytes (IP header와 비슷)

Reserved

  • 안써. NOT used

Window size

  • 16 bits
  • size of the advertised window
  • receiver가 남은 buffer size를 sender한테 보내서, 이걸 보고 sender가 본인 속도 조절을 해.
  • the sender should NOT send data more than advertised window
    -> flow control

Control field

URG

  • urgent pointer is valid
  • segment includes urgent data
  • 긴급하게 보낼 게 있다 -> 보내는 데이터에 끼워서 보낸다.
  • urgent data : data NOT in the original byte stream
  • the urgent pointer points to the starting point of the normal data

ACK

  • acknowledge field is valid
  • ack number가 valid하다
  • SYN 제외하고 항상 1

PSH

  • push the data
  • 이거 빨리 올려라. 빨리 application에게 줘라
  • immediately send buffered data to the application
  • remote terminal 같은 interactive application에 이용된다

RST

  • 서버가 하는거
  • reset the connection (when server wants)
  • 연결 재설정

SYN

  • client가 하는거
  • synchronize sequence number during connection (??)
  • 연결 설정하기 위한 segment이다
  • connection setup

FIN

  • client가 하는거
  • terminate the connection
  • 연결 해제
  • connection teardown

0개의 댓글