[네트워크]전송층 프로토콜 TCP

been·2021년 2월 5일
0

개인공부

목록 보기
2/11

##전송 제어 프로토콜

  • TCP는 연결지향적신뢰성 있는 프로토콜이다
    • 연결지향적 >> 연결설정, 데이터 전송, 연결 해제 단계 정의
    • 신뢰성 >> GBN, SR프로토콜 조합 사용
  • 가장 일반적인 프로토콜

##TCP Services

  1. 포트번호를 이용하여 프로세스 대 프로세스 통신
  2. 스트림 전송 서비스
    1. TCP에서 송신 프로세스는 바이트 스트림 형태로 데이터를 전송
    2. 두 개의 프로세스가 가상의 "튜브"로 연결
      • 튜브
    3. 송신 버퍼와 수신 버퍼
      • 필요한 이유? 송신 및 수신 프로세스가 동일한 속도로 데이터를 생성하거나 소비하지 않을 수 있기때문
      • 각 방향마다 송신 버퍼와 수신 버퍼의 두 개의 버퍼 존재
        • 버퍼
    4. TCP 세그먼트
      • IP는 바이트 스트림의 형태가 아닌 패킷의 형태로 데이터를 전달
      • TCP는 일련의 바이트를 세그먼트라고 하는 패킷으로 그룹화
      • TCP는 각각의 세그먼트에 헤더를 붙이고, IP계층에 세그먼트를 전송 >> 캡슐화되어 전송
      • 사진
  3. 전이중 통신
    • 데이터를 동시에 양방향 전송 가능
  4. 다중화와 역다중화
    • 송신측에서 다중화를 수행, 수신측에서 역다중화 수행 (UDP와 같음)
    • 연결 지향이므로 프로세스간에 연결이 설정되어 있어야 함 (UDP와 다름)
  5. 연결 지향 서비스
    • 1단계 : 두 TCP간의 가상 연결 설정
    • 2단계 : 양방향으로 데이터 교환
    • 3단계 : 연결 종료
  6. 신뢰성 있는 서비스
    • 확인응답 메커니즘 사용

##TCP의 특징

번호화 시스템

  1. 바이트 번호
    • TCP는 한 연결에서 전송되는 모든 데이터 바이트번호를 매김
    • 각 방향(송신-수신)에서 독립적으로 매겨짐
    • TCP는 0에서 2^32-1 사이의 임의 값을 선택하여 이를 처음 바이트 번호로 설정
    • 임의 값이 1,057, 총 데이터 6,000바이트이면 1,057 ~ 7,056까지의 번호 매겨짐
  2. 순서번호
    • 바이트 번호가 매겨지면, 전송하고자 하는 세그먼트하나의 순서번호를 할당
    • 각 방향에서 순서 번호의 정의
  3. 확인응답 번호
    • TCP는 양방향이므로, 연결 설정되면 양측에서 동시에 데이터를 송수신
    • 각 방향으로 전송되는 세그먼트에 있는 순서 번호는 그 세그먼트에의해 운반되는 첫 번째 바이트의 번호
    • 각 TCP는 자신이 바이트를 수신하였다는 것을 확인하기 위해 확인응답 번호를 전송 -> 확인응답 번호는 자신이 수신하기를 기대하는다음 바이트의 번호
    • 확인응답 번호는 누적(cumulative)
      • 한쪽 편에서는 수신 성공한 마지막 바이트의 번호에 1을 더한 값을 확인응답 번호로 전송

##Segment

세그먼트(Segment) : TCP에서의 패킷

  • 형식

    1. 제어
      • URG, ACK, PSH, RST, SYN, FIN
    2. 검사합
      • UDP와 동일하게 의사헤더가 검사합 계산을 위해 세그먼트에 추가됨
  • 검사합(Checksum)이란?

##TCP연결

  • 연결지향 전송 프로토콜 > 발신지와 목적지 간의 가상경로를 설정
  • 손상, 손실된 프레임의 재전송확인응답 등의 처리 가능

#연결설정

  • 연결이 되면 통신이 시작
    • 데이터 교환 전 한편에서는 통신을 개시하고,
    • 다른 편에서는 개시에 대한 승인이 이루어져야 함

**3단계 핸드쉐이킹 절차

: TCP에서의 연결 설정3단계 핸드쉐이킹(Three-way handshaking)이라고 함

  • 사진
  1. 1단계
    • 클라이언트는 첫 번째 세그먼트로서 SYN 플래그가 1로 설정된 SYN 세그먼트를 전송(동기화가 목적)
    • 클라이언트는 임의의 값을 첫 번째 순서 번호로 전송(ISN: 초기 순서 번호)
    • 이 세그먼트에는 확인응답 번호(ACK)가 포함되지 않음
    • 윈도우 크기도 정의하지 않음(윈도우 크기는 세그먼트가 확인응답 번호를 포함하는 경우에만 의미)
    • 즉, SYN 세그먼트는 단지 하나의 제어 세그먼트이며, 어떠한 데이터도 전달하지 않음
    • SYN 세그먼트는 데이터 전달X, 하나의 순서번호를 소비

  2. 2단계
    • 서버는 두 번째 세그먼트로서 SYN과 ACK 플래그 비트가 각각 1로 설정된 SYN+ACK 세그먼트를 전송
    • 세그먼트는 반대 방향으로의 통신을 위한 SYN 세그먼트임
    • 서버->클라이언트로 전송되는 바이트의 순서화를 위한 순서 번호를 초기화하기 위해 사용
    • 서버는 ACK 플래그를 1로 설정하고 클라이언트로부터 수신하기를 기대하는 다음 순서 번호를 표시함으로써 클라이언트로부터의 SYN 세그먼트 수신을 확인응답
    • 이 세그먼트는 SYN 세그먼트의 역할을 수행하기 때문에 하나의 순서 번호를 소비
    • SYN + ACK 세그먼트는 데이터를 전달하지는 않지만 하나의 순서번호를 소비

  3. 3단계
    • 클라이언트는 세 번째 세그먼트를 전송(단순 ACK 세그먼트)
    • ACK 플래그와 확인응답 번호 필드를 이용하여 두 번째 세그먼트의 수신을 확인
    • 이 세그먼트에 있는 순서 번호는 SYN 세그먼트에 있는 것과 동일한 값으로 설정(ACK 세그먼트는 어떠한 순서 번호도 소비하지 않음)
    • 클라이언트는 서버의 윈도우 크기를 결정해야 함
    • ACK 세그먼트는 데이터를 전달하지 않는 경우에는 순서번호를 소비하지 않는다.

#데이터 전송

  • 연결이 설정된 후에는 양방향으로 데이터가 전송될 수 있음
  • 동일한 방향으로 전송되는 데이터와 확인응답은 하나의 세그먼트로 전달
  • 확인응답에 데이터가 피기백(piggyback) 됨
    • piggybacking이란?

#푸싱 데이터

#긴급 데이터

#연결 종료

0개의 댓글