네트워크#1 - TCP, UDP, MTU

Posted by ironmask84
2017. 10. 18. 16:31 나는 프로그래머다!/Sensor



라즈베리파이와 같은 네트워크 기능이 있는 디바이스를 가지고 개발을 하다보면,

네트워크 성능 측정 및 기능체크를 위해 'iperf' 라는 툴로 패킷을 주고받는 측정을 합니다.

이 iperf라는 툴을 사용 시에, 여러가지 옵션을 설정할 수 있는데,

그 중에 TCP, UDP와 같이 프로토콜 선택은 물론,

패킷 사이즈 및 갯수 등과 MSS(MTU 에서 특정 header를 뺀 것)을 설정할 수 있습니다.

예전에 네트워크 관련 스터디를 통해 들어본 바 있는 용어이지만,

다시금 뇌에서 되살려 보는 차원에서 기록 및 공유 합니다. 


TCP와 UDP

TCP 패킷 구조도


Sport =
송신자 포트

Dport= 수신자 포트

Sequence Number= TCP전송되는 데이터의 일련 넘버

Acknowledgment number= 응답 데이터 일련 넘버 + 전송된 데이터 합

Header Lengths = TCP Header 길이

Reserved = 예약된 번호 현재 사용되지 않음 항상 0

Control Bit = 패킷을 어떻게 다룰지 흐름등 관리하기 위한 사항

1.     URG = 최우선 순위 긴급한 패킷

2.     ACK = ACK필드 유효시 1

3.     PSH = 우선순위는 좀 떨어지더라도 최대한 빠른 전송 요청

4.     ROT = 현재 세션을 재 시작하려 할 때 사용 Session을 끊을때도 사용함

5.     SYN = Sequence Number를 송신측과 동기화하려 할 때 Session시작 시

6.     FIN = Session을 끊고자 할 때

Windows = 수신측에서 처리할 수 있는 Buffer

Checksum = TCP 오류 검증을 위한 데이터

Urgent Pointer= 급처리 데이터 마지막 바이트

Option = 필요시 생성 그다지

Padding = 32Bit의 배수를 만듬



UDP 패킷 구조도


LLC에서는 ethertype IP가 대입이 되어야 IP Packet이 되는 것이고 IP Header에서는 Type TCP UDP가 대입이 되어야지 TCP Packet UDP Packet이 만들어 집니다. ^^ 헤헤..


보시면 왜 MAC IP TCP순인줄은 금방 아시겠지요. ^^

         L2   L3 L4 입니다.

Layer Switch의 경우 L2Switch L3Switch L4Switch이렇게 나누자나요.


이 기준은 바로 Packet을 어디까지 분석해서 보내는지를 나타내는 거죠 ^^

IP만 보면 L3, Port까지 보고 스위칭하면 L4,


아무래도 앞에 있어야 분석하기 쉽겠죠. ^^ L2~L4까지 만약 L4가 먼저 있음 L2스위치는 포워딩하려면 L2데이터가 어딨는지 찾는데 딜레이타임이 걸릴 테니까.


또한 IP레벨의 스위칭도 여러가지 입니다.


보통은 목적지만 보고 라우팅하는데, 시스코의 CEF나 기타 프로토콜은 소스를 같이 보고 라우팅하죠. 이게 무슨 차이냐고 말씀하시는데 -_-;; 생각해보세요.

힌트는 LoadBanlancing입니다. 부하 분산에 차이죠. 라인이 하나라면 목적지만 보고 보내는 거랑 별 차이 없겠죠. 그러나 라인이 둘이라면 좀 다른 문제겠죠. ^^;;

출처: http://redsejo.tistory.com/4 [기도로 시작하는 하루]


MTU, MSS 란?

//MTU 란? http://qaos.com/article.php?sid=149

PING –f –l <MTU Size(Packet size + 28)> <interface default gateway address>
( 여기서 28은 'IP Header (20 bytes) + ICMP-Header (8 bytes)' )

Ex) ping <IP Address> -f -l <576~1500>로 값을 넣어 1472 로 값이 나왔다면 1472 + 28 = 1500 , 즉 MaxMTU 값은 '1500' 이 됩니다.


//MSS란(Maximum Segment Size)? 데이터 프레임 중 순수한 TCP 데이터 부분의 최대 값으로 분할하지 않고 한번에 보내는 것을 뜻합니다.

"윈도우 사이즈(크기) : TCP 환경에서 송신 호스트와 수신 호스트는 데이터를 수신한 다음, 다음 데이터를 보내 줄 것을 요청(Ack)하고, 요청을 받은 호스트는 다음 데이터를 보냅니다. 이런 과정에서 송신호스트는 Ack을 수신하기 전에 일정량의 데이터를 보낼 수 있는데 이를 윈도우 사이즈라고 합니다.

MSS(Maximum Segment Size) : 현재의 연결에서 TCP가 보낼 수 있는 최대의 데이터 크기를 말합니다. MTU라고 알려진 최대 전송 크기에서 헤더 부분을 뺀 부분이 MSS가 됩니다. Ethernet의 경우 MTU가 1500byte로 결정되어 있으며, 따라서 Ethenet에서 MSS는 1460byte가 됩니다.



" - 인용 ( 초보 서버 관리자를 위한 네트워크 및 보안 기초 포켓북 )

  
MSS = MaxMTU - 40 ( 40 = 'IP Header(20 bytes) + TCP Header (20 bytes + ? bytes)' )
Ex) 1500 - 40 = 1460 ( ? = 12byte , timestamp 옵션 적용시 추가됨 )

'Tcp1323Opts(Timestamp - RFC 1323)' 옵션에 'timestamp'이 활성화될 경우,
'Client ACK: TCP header'는 12byte를 추가한다. 즉, MSS 값은 1448 이 된다.

출처 : http://url.tistory.com/3