728x90
복습하기 위해 학부 수업 내용을 필기한 내용입니다.
이해를 제대로 하지 못하고 정리한 경우 틀린 내용이 있을 수 있습니다.
그러한 부분에 대해서는 알려주시면 정말 감사하겠습니다.
▶TCP Services
- 아래 그림은 TCP/IP 프로토콜 스위트의 다른 프로토콜에 대한 TCP의 관계를 보여준다.
- TCP는 application layer과 network layer 사이에 위치한다.
- application programs과 network 작업 사이의 중개자 역할을 한다.
▶Topics Discussed in the Section
- Process-to-Process Communication
- Stream Delivery Service
- 여러 데이터의 연속적인 데이터(흐름)를 보낸다.
- UDP는 이런 기능이 없다.
- Full-Duplex Communication
- Multiplexing and Demuliplexing
- Connection-Oriented Service
- UDP : 메시지를 보내고 끝 (Connectionless)
- TCP : connection 설정/해제해줘야 한다.
- Reliable Service
- error control
- simplex : 한쪽만 보낼 수 있다. (단방향)
- Duplex : 양방향
- Full-Duplex : 동시에 가능
- Half-Duplex : 그 순간에 하나씩
Stream of Bytes : flow of data, 계속해서 보낸다. (like pipe)
Sending buffer : 정렬해주고 TCP가 독자적인 규칙으로 차근차근 보낸다.
Sent : 보냈지만 받았다는 신호가 오지 않아서 기다리는 중이다.
Not sent : 아직 보내지 않은 정보들이다.
receiving buffer도 존재한다.
긴 것이 오면 1024Byte로 쪼개서 buffer에 저장한다. (segmentation)
왜냐하면 Segment * 즉 packet 1개의 크기가 1024Byte이기 때문이다.
▶TCP Features
- Numbering System
- Flow Control
- Error Control
- Congesting Control
각 연결에서 전송되는 데이터의 Byte 수는 TCP로 지정된다.
번호는 임의로 생성된 번호로 시작한다.
UDP : message type protocol
TCP : Byte type protocol
세그먼트의 시퀀스 번호 필드의 값은 해당 세그먼트에 포함된 첫 번째 데이터 Byte에 할당된 번호를 정의한다.
세그먼트의 acknowledgment 필드 값은 당사자가 수신할 것으로 예상되는 다음 Byte 수를 정의한다.
즉, 다음 Byte 번호를 알려준다.
이러한 acknowledgment 번호는 누적된다.
▶Segment
- TCP에서 패킷을 segment라고 한다.
1~5번째 줄은 4Byte * 5 = 20Byte이다.
options and padding은 최대 40Byte이다.
첫 번째 줄 : port number
두 번째 줄 : data의 첫 번째 위치 (보내는)
세 번째 줄 : 받는 애 입장에서 여기까지 받았다는 정보
네 번째 줄 : header length + reserved + flag + queue(buffer) size (window size)
다섯째 줄 : checksum + urgent pointer (flag URG가 1이면 어디에 있는지 위치정보)
URG : data에 긴급 data가 있다.
ACK : ACK_field가 의미 있다 없다를 알려준다.
PSH : 쌓여있으면 빨리 push 해라.
RST : critical - 1이면 갑자기 끝난다. 오류가 있어서 긴급하게 끝낼 때 사용한다.
SYN :
FIN :
TCP에서 checksum 사용은 필수다.
필수인 이유는 error control 해야 하기 때문이다.
▶A TCP connection
- TCP는 connection-oriented다.
- source와 destination 사이에 가상 경로를 설정한다.
- 그러면 메시지에 속한 모든 segment가 이 가상 경로를 통해 전송된다.
- connectionless protocol인 IP의 서비스를 이용하는 TCP가 어떻게 연결 지향적일 수 있는지 궁금할 것이다.
- 요점은 TCP 연결이 물리적 연결이 아니라 가상이라는 것이다.
- TCP는 더 높은 수준에서 작동한다.
- TCP는 IP 서비스를 사용하여 개별 segment를 수신자에게 전달하지만 연결 자체를 제어한다.
- segment가 손실되거나 손상되면 다시 전송된다.
▶Topics Discussed in the Section
- Connection Establishment
- Data Trasfer
- Connection Termination
- Connection Reset
packet 3개를 주고받고 연결 설정한다.
SYN 세그먼트는 데이터를 전송할 수 없지만 하나의 시퀀스 번호를 사용한다.
SYN + ACK 세그먼트는 데이터를 전송할 수 없지만 하나의 시퀀스 번호를 사용한다.
ACK 세그먼트는 데이터가 없는 경우 시퀀스 번호를 사용하지 않는다.
FIN 세그먼트는 데이터를 전송하지 않는 경우 하나의 시퀀스 번호를 소비한다.
FIN + ACK 세그먼트는 데이터를 전송하지 않는 경우 하나의 시퀀스 번호를 소비한다.
FIN-ACK-FIN-ACK 4 way가 정상이다.
하지만 client가 이미 연결을 끊은 상태에서 ACK가 의미가 있나?
그래서 3 way로 하는 것이 SCPT이다.
▶State Transition Diagram
- 연결 설정, 연결 종료 및 데이터 전송 중에 발생하는 모든 다른 이벤트를 추적하기 위해서
- TCP는 아래 그림에 표시된 유한 상태 기계로 지정된다.
양쪽에서 동시에 연결을 시도해도 문제없다.
연결 해제 또한 상관없다.
▶Windows in TCP (reliable)
- TCP에서 데이터 전송과 흐름, 오류 및 정체 제어와 같은 문제에 대해 논의하기 전, TCP에서 사용되는 창을 설명한다.
- TCP는 데이터 전송의 각 방향에 대해 두 개의 창(전송 창과 수신 창)을 사용하며, 이는 양방향 통신을 위한 네 개의 창을 의미한다.
- 논의를 단순화하기 위해, 의사소통이 단방향일 뿐이라고 가정한다.
- 양방향 통신은 피기백과 함께 두 가지 단방향 통신을 사용하여 추론할 수 있다.
a에서 201~260을 보낸다. 만약에 ack가 도착하지 않아서 반응이 없으면 없애면 안 된다.
261~300는 don't send 다.
size는 300을 넘으며 안되는데
window size가 계속 바뀌기도 하고, 움직이기도 한다.(sliding)
▶Flow Control
- flow control는 생산자가 데이터를 생성하는 속도와 소비자가 데이터를 사용할 수 있는 속도를 균형 있게 조정한다.
- TCP는 flow control와 error control를 분리한다.
- 이 섹션에서는 error control를 무시하고 flow control에 대해 설명한다.
- 우리는 일시적으로 송신 TCP와 수신 TCP 사이의 논리적 채널이 오류가 없다고 가정한다.
- 아래 그림은 송신자와 수신자 사이의 단방향 데이터 전송을 보여준다.
- 양방향 데이터 전송은 단방향 데이터 전송에서 추론할 수 있다.
- 한마디로, flow cotrol은 상대방을 배려해서 buffer를 초과하지 않는 것이다.
▶Error Control (다시 보내준다.)
- TCP는 신뢰할 수 있는 transport layer protocol이다.
- 즉, TCP에 데이터 스트림을 전달하는 응용 프로그램은 TCP에 의존하여 전체 스트림을 다른 쪽 끝의 응용 프로그램에 순서대로 오류 없이, 그리고 어떤 부분도 분실하거나 복제하지 않고 전달한다.
- TCP의 error control는 checksum, acknowledgment 및 time-out라는 세 가지 도구를 사용하여 이루어진다.
ACK 세그먼트는 시퀀스 번호를 소비하지 않으며 승인되지 않는다.
데이터가 잘못하여 수신 TCP에 의해 일시적으로 저장될 수 있지만,
TCP는 프로세스에 잘못된 데이터가 전달되지 않도록 보장한다.
TCP는 Selective Repeat protocol로 가장 잘 모델링 될 수 있다.
ACK generation rule
Rule 1 : data가 포함되어있으면 ACK를 사용해라. (ACK를 많이 보내면 좋다.)
Rule 2 : 보낼 data가 없다. ACK delaying timer 시간 지나면 ACK라도 보내라.
Rule 3 : data가 두 개 연달아 오면 ACK를 보내라. (1번 보낸다.)
Rule 4 : lost 되어서 빈 경우가 생기면 ACK를 보내라. (out of order)
Rule 5 : 중간이 다시 채워지면 보내라.
내가 보냈는데 답장이 안 온다. 그때 timer 시간이 지나면 새로 보낸다.
수신기 TCP는 순서가 지정된 데이터만 프로세스에 전달한다.
out of order가 발생하면 server 쪽에서는 계속해서 동일한 ACK만 보낸다.
그게 3번이 반복해서 들어오게 된다면 lost 된 부분을 다시 보낸다.
ACK가 lost 되면 문제가 발생하지 않는다.
자연스럽게 복구된다.
data lost는 문제이다.
Rule 6 : 이미 받은 애를 중복해서 받는다면, ACK를 보낸다.
ACK가 손실되었고, 더 보낼 애가 없을 때, RTO가 지나게 되면 다시 보낸다.
만약 적절하게 처리되지 않는다면 Lost acknowledgement는 교착 상태가 발생할 수 있습니다.
이때 time out을 기다리는 시간은 너무 길다.
그래서 시간이 짧은 fast retransmission보다 좋지 못하다.
fast retransmission은 ACK를 기다리지 않고 계속해서 내 것을 보내기 때문이다.
▶Congestion Control
- TCP의 congestion control는 오픈 루프와 클로즈드 루프 메커니즘을 기반으로 한다.
- TCP는 정체를 피하고 정체가 발생한 후 이를 감지하고 완화하는 congestion window과 congestion 정책을 사용한다.
- 한마디로, network 상태가 안 좋으면 그 순간에 사리자!
cwnd 하나로 시작하여서 지수적으로 증가한다.
느린 시작 알고리즘에서 congestion window의 크기는 임계값에 도달할 때까지 기하급수적으로 증가한다.
2씩 곱하면서 지수적으로 증가하다가 너무 혼잡해지면 하나씩 증가한다.
congestion avoidance (threshhold가 있다.)
혼잡 회피 알고리즘에서 congestion window의 크기는 혼잡이 감지될 때까지 부가적으로 증가한다.
여담으로 rwnd/cwnd 두 윈도우의 min 값이 실제 sending window size이다.
▶TCP Timers
- 원활한 작동을 위해 대부분의 TCP 구현은 아래 그림과 같이 최소 4개의 타이머를 사용한다.
▶Options
- TCP 헤더에는 최대 40바이트의 option 정보가 포함될 수 있다.
- option은 추가 정보를 destination에 전달하거나 다른 option을 정렬한다.
- 1Byte option과 다중 Byte option이라는 두 가지 option을 정의할 수 있다.
- 첫 번째 범주에는 option 목록 종료와 작업 없음이라는 두 가지 유형의 option이 있다.
- 대부분의 구현에서 두 번째 범주는 최대 segment 크기, 창 스케일 팩터, 타임스탬프, SACK 허용 및 SACK의 다섯 가지 유형의 옵션을 포함한다.
- 아래 그림 참조
single-byte는 IP option과 유사하다.
Multiple-byte
Maxinum segment size (MSS) : packet size
Window scale factor
Timestamp
SACK-permitted
SACK : 이빨 빠진 거 다 체크
728x90
'컴퓨터공학 > 컴퓨터망' 카테고리의 다른 글
[컴퓨터망] Application Layer (0) | 2022.07.09 |
---|---|
[컴퓨터망] Stream Control Transmission Protocol (SCTP) (0) | 2022.07.09 |
[컴퓨터망] User Datagram Protocol (UDP) (0) | 2022.07.03 |
[컴퓨터망] Transport Layer (0) | 2022.07.03 |
[컴퓨터망] Multicasting And Multicast Routing Protocols (0) | 2022.07.03 |