CafeM0ca

[Network] TCP 정리 본문

Hacking/기본기

[Network] TCP 정리

M0ca 2020. 11. 21. 19:53
반응형

이번에 과제가 외주로 들어왔는데 미쿡에서 유학하시는 분인 것 같더라.

대학을 다니는데 본인 과제가 외주로 오는 경우는 2가지가 있다.

1. 돈이 많아서 맡기고 놀러 다니거나

2. 학점으로 인해서 장학금에 금이 간다거나..

2의 경우를 좀 더 세분화하면 수업 시간에 농땡이 피우다가 발등에 불 떨어지는 경우와 혼자서 진짜 하다가 안되니까 맡기는 경우가 있는데, 이번 의뢰인은 후자의 경우 같더라.(조금 떠보면 알 수 있다)

TCP에 기억나는 거라고는 사실 3-way handshake정도?

https://cafemocamoca.tistory.com/213

 

 

[NetWork] 3 way handshake

tcp/ip에서 씀 ACK는 세션이 같다는걸 인증하기위해 계속 보내줘야함 클라이언트의 sequence 번호와 서버의 sequence 번호가 존재. 임의로 정하자. 클라이언트 : 1000 서버 : 2000 클라이언트 -> 서버 SYN패

cafemocamoca.tistory.com

TCP는 위키피디아에 괜찮게 적혀 있는데

ko.wikipedia.org/wiki/전송_제어_프로토콜

 

전송 제어 프로토콜 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 전송 제어 프로토콜(Transmission Control Protocol, TCP, 문화어: 전송조종규약)은 인터넷 프로토콜 스위트(IP)의 핵심 프로토콜 중 하나로, IP와 함께 TCP/IP라는 명칭으로

ko.wikipedia.org

tcp 패킷이 아니라 tcp 세그먼트라고 표현한다. 세그먼트가 TCP 프로토콜 데이터 유닛(PDU)의 정확한 표현이라고 하니, 어디가서 TCP 세그먼트라고 말하고 다니자.

위키피디아 TCP 헤더

위키피디아에 보면 TCP 헤더 그림이 있다.

네트워크에서 TCP 세그먼트가 날아오면! 저 순서대로 받게 된다는건데

맨 처음 2바이트(16비트)는 source port(보내는쪽 포트)

그 다음 2바이트는 destination port(받는 쪽 포트)

그 다음 4바이트는 sequence number(TCP segment를 보내는 번호)

그 다음 4바이트는 Acknowledgment number(sequence number에 대한 답장 번호)

이런 식으로 데이터가 쭉 이어진 형태다.

여기서 다룰 것들은 아래와 같다.

1. tcp에서 이게 뭐지 싶은 것들(window size, 등)

2. python의 dpkt 라이브러리로 값 직접 보는 법

아래 블로그에서 UDP Header 정보 전까지 보고 오자.

velog.io/@hidaehyunlee/TCP-와-UDP-의-차이

 

 

TCP 와 UDP 차이를 자세히 알아보자

TCP와 UDP는 TCP/IP의 전송계층에서 사용되는 프로토콜이다. 전송계층은 IP에 의해 전달되는 패킷의 오류를 검사하고 재전송 요구 등의 제어를 담당하는 계층이다.

velog.io

TCP 연결에는 3-way handshake와 4-way handshake가 있고 각각 연결과 연결종료의 과정이다. pcap파일을 wireshark(패킷 캡쳐 툴)로 보면

Connection establish request로 43498 포트(클라이언트)에서 80포트(서버)로 연결을 요청한다.
80포트(서버)에서 43498(클라이언트)로 연결되었다고 ACK를 보낸다.
클라이언트는 서버에게 연결 잘 되었다고 ACK를 보낸다.

이후에는 클라이언트가 본격적으로 데이터를 보내기 시작한다.

psh, ack는 버퍼에 데이터가 가득 차지 않아도 바로 데이터 전송함

window size라는게 있다. 수신자가 받을 수 있는 데이터 크기이며 byte 단위다. window size의 최대값은 16bit(=2byte)로 64K(65,535)이였는데 window Scaling 옵션으로 window_size의 최대값 보다 많이 보낼 수 있게 해준다.

MMS라는 것도 있는데 Maximum segment size로 tcp 에서 세그먼트의 최대값을 의미한다.

TCP congestion control(혼합 방지)라는게 있는데, 네트워크 부하로 segment가 손실 되는 것을 줄이는 것이다.

방법에는 2가지 Tahoe와 Reno가 있다. ko.wikipedia.org/wiki/TCP_혼잡_방지_알고리즘

 

TCP 혼잡 방지 알고리즘 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 전송 제어 프로토콜(TCP)은 네트워크 혼잡 방지 알고리즘을 사용하여 네트워크에서 부하로 인해 패킷 손실이 발생하는 것을 줄인다. 이 문서에서는 TCP에서 사용

ko.wikipedia.org

위 에서 타호와 리노에 대해 알았으면 fast retransmit과 fast recovery에 대해서 알아야하는데 아래 글을 참조하자.

movefast.tistory.com/36

 

6. Fast Retransmit and Flow Control - 빠른 재전송과 흐름 제어

▶ Fast Retransmit (빠른 재전송) - 재전송 타이머 값이 종종 상대적으로 길어지므로, 손실된 패킷의 재전송 전에 지연시간이 커진다. - 위의 상항을 해결하고자 중복 ACKs를 통해 손실된 세그먼트를

movefast.tistory.com

위까지 이해 했으면 마지막으로 이 게시글을 보면 된다.

park1020.tistory.com/198

 

TCP 혼잡제어

TCP 는 Transmission Control Protocol 의 줄임말로, 실제 TCP 대신 흐름제어소켓이라고 말하기도 한다. 이 프로토콜은 네트워크로 연결된 호스트간의 데이터를 안전하게 전달하기 위한 목적으로 사용되며

park1020.tistory.com

파이썬 dpkt로 pcap파일을 내용 보는 법

몇 줄 없다.

간단한 코드다.

pcap 파일을 읽어들이고 각 패킷을 뽑아 낼 수 있다.

buf에는 데이터가 담겨 있고 (buf를 출력해보면 바이너리 형태라서 읽을 수 없으니 읽을 수 있게 바꿔줘야 한다.)

tcp 객체에는 우리가 필요한 값들 sport(송신측 포트), dport(수신측 포트), tcp.flags(ACK인지 플래그들..)이 담겨있다. 자세한건 tcp 객체를 출력해보자.

참고

www.networkcomputing.com/data-centers/network-analysis-tcp-window-size

 

Network Analysis: TCP Window Size

Tony Fortunato demonstrates how to track TCP window size to troubleshoot network performance issues.

www.networkcomputing.com

m.blog.naver.com/goduck2/221113532619

 

[오리뎅이의 TCP 이야기 - 3] 저수지의 개들? TCP의 window들 - 1

안녕하세요? 오리뎅이입니다. 지난 이야기에서 TCP 속도에 대한 이야기를 하는 중에 TCP 속도를 높이...

blog.naver.com

반응형

'Hacking > 기본기' 카테고리의 다른 글

[Network] Proxy와 VPN(Virtual Private Network)  (0) 2019.03.30
[NetWork] 3 way handshake  (0) 2018.07.24
[기본기]심볼이 깨진 바이너리파일  (0) 2018.02.01
[기본기]함수 호출 규약  (0) 2018.01.12
Comments