전송 제어 프로토콜은 OSI 또는 TCP/IP 모델의 전송 계층에서 매우 중요한 프로토콜입니다. TCP에는 다음과 같은 많은 이점이 있습니다.
- TCP는 보낸 데이터가 일정 시간 내에 수신자에 의해 확인되지 않으면 재전송합니다.
- TCP는 데이터를 보내기 전에 일부 연결을 설정합니다. 이 연결을 3방향 핸드셰이크라고 합니다.
- TCP에는 혼잡 제어 메커니즘이 있습니다.
- TCP는 몇 가지 방법을 사용하여 오류를 감지할 수 있습니다.
TCP 3-way handshake를 중심으로 알아봅시다. Wireshark에서 3-way handshake를 위한 중요한 필드에 대해서도 알아봅시다.
3방향 핸드셰이크
3방향 핸드셰이크에서 발생하는 세 가지 프레임 교환이 있습니다.
첫 번째 프레임은 항상 클라이언트에서 서버로 전송됩니다. 간단한 다이어그램으로 이를 이해해 보겠습니다.
'클라이언트 서버'
Frame1: 클라이언트가 SYN 프레임을 서버로 전송 --------------------------------------------------><-------------------------------------------서버에서 SYN+ACK 프레임 전송 클라이언트: Frame2
Frame3: 클라이언트가 ACK 프레임을 서버로 전송-------------------->
Wireshark에서 이 세 가지 프레임을 볼 수 있습니다. Wireshark에서 'tcp' 필터를 사용하여 모든 TCP 프레임을 볼 수 있습니다. 세 프레임의 스크린샷은 다음과 같습니다.
이제 세 가지 프레임을 모두 자세히 이해하겠습니다.
SYN
이 프레임에는 서버에 알리는 클라이언트의 기능에 대한 많은 정보가 포함되어 있습니다. 다음 스크린샷은 SYN 프레임의 모든 중요한 필드를 보여줍니다.
다음은 SYN 프레임의 중요한 필드입니다.
소스 포트: 50602대상 포트: 80
시퀀스 번호: 0
승인 번호: 0
헤더 길이: 32바이트
플래그: 0x002(SYN):
확인: 설정되지 않음
푸시: 설정되지 않음
재설정: 설정되지 않음
Syn: 설정 -----> 이 비트는 SYN 프레임이기 때문에 설정됩니다.
핀: 설정되지 않음
창: 65535
긴급 포인터: 0
TCP 옵션 - 최대 세그먼트 크기: 1460바이트
TCP 옵션 - 창 크기: 3(8을 곱함)
TCP 옵션 - SACK 허용
보기+확인
이 프레임에는 클라이언트에 알리는 서버의 기능에 대한 많은 정보가 포함되어 있습니다. 다음 스크린샷은 SYN+ACK 프레임의 모든 중요한 필드를 보여줍니다.
이 프레임은 또한 클라이언트가 보낸 SYN 프레임을 승인합니다.
다음은 SYN+ACK 프레임의 중요한 필드입니다.
소스 포트: 80대상 포트: 50602
시퀀스 번호: 0
확인 번호: 1
헤더 길이: 32바이트(8)
플래그: 0x012(SYN, ACK)
승인: 설정
푸시: 설정되지 않음
재설정: 설정되지 않음
그의: 세트
핀: 설정되지 않음
창: 29200
긴급 포인터: 0
TCP 옵션 - 최대 세그먼트 크기: 1412바이트
TCP 옵션 - SACK 허용
TCP 옵션 - 창 배율: 7(128을 곱함)
이 프레임에서 'Acknowledge' 및 'SYN' 비트가 설정되어 있는 것을 볼 수 있습니다. 이것은 이 프레임이 SYN+ACK이기 때문입니다.
ACK
이 프레임은 3방향 핸드셰이크의 마지막 프레임이자 클라이언트의 SYN+ACK 승인이기도 합니다. 다음 스크린샷은 ACK 프레임의 모든 중요한 필드를 보여줍니다.
다음은 ACK 프레임의 중요한 필드입니다.
소스 포트: 50602대상 포트: 80
시퀀스 번호: 1
확인 번호: 1
헤더 길이: 20바이트(5)
플래그: 0x010(ACK)
긴급: 설정되지 않음
승인: 설정
푸시: 설정되지 않음
재설정: 설정되지 않음
동의어: 설정되지 않음
핀: 설정되지 않음
창: 32768
여기서는 ACK 프레임이므로 'Acknowledge' 비트만 설정됩니다.
일부 중요한 공통 필드에 대한 설명
포트 80 : 이 튜토리얼에서는 하나의 고정 포트 80을 관찰했습니다. 이것은 HTTP 캡처이고 HTTP 통신을 위해 포트 80이 고정(서버 측)되기 때문입니다.
시퀀스 번호 : 해당 프레임의 시퀀스 번호입니다. 동기화는 첫 번째 프레임이므로 시퀀스 번호가 0입니다.
TCP 플래그:
승인 – 프레임이 ACK이면 이 비트가 설정됩니다. 예: SYN+ACK, ACK 프레임.
SYN – 프레임이 SYN이면 이 비트가 설정됩니다. 예: SYN.
창문 : 이 필드는 수신 모드에서 보낸 사람의 최대 창 크기를 공유합니다. 예: SYN 프레임의 창 크기는 65535바이트입니다. 이는 수신자가 어느 시점에서든 최대 65535바이트의 TCP 데이터를 수신할 수 있음을 의미합니다.
자루 허용 : send가 SACK[선택적 승인]을 지원하는 경우 이 비트가 설정됩니다.
최대 세그먼트 크기 : MSS라고 부를 수도 있습니다. 송신자가 수신할 수 있는 최대 데이터 프레임을 정의합니다. 예: SYN 프레임에서 MSS를 1460바이트로 얻습니다.
결론
우리는 TCP 3방향 핸드셰이크와 SYN, SYN+ACK 및 ACK 프레임에 대한 모든 유용한 필드에 대해 배웠습니다. TCP에 대해 자세히 알아보려면 이 RFC 링크를 따라갈 수 있습니다. https://tools.ietf.org/html/rfc793 .