일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- FILE TRANSFER
- TCP/IP
- 등록임대주택
- 찾다죽는줄
- QT TCP
- file write
- 엑스퍼트2주년
- 월세
- object
- 티몬삼겹살데이
- Lua
- 국토교통부
- #부동산전자거래 #부동산전자계약 #부동산계약 #부동산전자계약방법 #부동산전자계약하는법 #부동산계약방법 #부동산중개수수료 #부동산중개수수료아끼기 #부동산복비아끼기
- 프리미어 영상저장
- #신혼부부 #결혼준비 #신혼부부희망타운신혼부부특별공급
- 프리미어 영상변환
- file open
- 엑스퍼트생일축하해
- file read
- 청량리역한양수자인192
- QTcpServer
- lua interpreter
- meta table
- C++ API
- lua install
- 수도권주택공급
- lua for windows
- lua setup
- C API
- 중소규모택지
- Today
- Total
Value Creator의 IT(프로그래밍 / 전자제품)
#1 Ethernet, TCP/IP 프로토콜 총 정리 본문
1. 통신모델
[요약]
-->TCP/IP 프로토콜이 Ethernet, IP, TCP, HTTP 등의 개념을 모두 포함하고 있다.
--> 맨 좌측 OSI 모델이 최초의 개념. 맨 우측이 TCP/IP 프로토콜. Ethernet=(Data Link) + (Physical)
[설명]
1.1 OSI 모델
OSI(Open System Interconnection) 7 계층으로 표준 프로토콜을 정의. 인터넷에서 TCP/IP 프로토콜이 차지하는 비중이 커지면서 OSI 7계층을 모두 구현하지 않았습니다. 이러한 이유로 TCP/IP 프로토콜을 중심으로 인터넷 프로토콜 스위트(Internet Protocol Suite)로 통신 계층을 표현하고 있습니다. 그리고 인터넷 프로토콜 스위트는 TCP/IP 프로토콜 스위트라고도 부릅니다. TCP/IP를 개발한 미 국방성 DARPA에서는 4계층으로 분류하였는데 이를 DoD(Department of Defence) 모델입니다. 이를 TCP/IP 프로토콜 4계층.
[그림 1] OSI 7계층
OSI 모델에서는 역할에 따라 7개의 계층으로 나누었습니다.
물리(Physical) 계층이 1계층이며 데이터 링크(Data Link) 계층, 네트워크(Network) 계층, 전송(Transport) 계층, 세션(Session) 계층, 표현(Presentation) 계층, 응용(Application) 계층이 있습니다.
물리(Physical) 계층이 1계층이며 데이터 링크(Data Link) 계층, 네트워크(Network) 계층, 전송(Transport) 계층, 세션(Session) 계층, 표현(Presentation) 계층, 응용(Application) 계층이 있습니다.
데이터를 처음으로 전송하는 호스트는 응용 계층에서 물리 계층까지 데이터를 캡슐화합니다. 그리고 물리 계층에서는 통신 회선을 통해 이웃하는 네트워크 장치에게 전달합니다. 데이터를 전송하기 위한 경로를 설정하고 판단하는 라우터에서는 목적지가 지역망의 호스트인지 확인합니다. 만약 지역망의 호스트가 맞다면 지역 호스트에게 전달하고 그렇지 않다면 이웃하는 라우터에게 전달합니다. 목적 호스트는 물리 계층으로부터 수신하여 응용 계층까지 디캡슐화하여 상대가 보낸 데이터를 받습니다.
이제 계층에 따라 어떠한 역할을 하는지 살펴봅시다.
물리 계층은 통신 회선을 통해 비트 스트림을 전달하는 역할을 수행합니다. 이는 통신 회선의 인터페이스와 물리 매체에 따른 전자적인 규격을 따릅니다.
데이터 링크 계층은 물리 계층에 도착한 비트 스트림을 네트워크 계층으로 전달하고 네트워크 계층의 패킷을 물리 계층으로 전달하는 역할을 수행합니다. 데이터 계층의 데이터를 프레임(Frame)이라 부릅니다. 프레임에는 물리 주소 정보를 포함하고 있습니다.
네트워크 계층은 통신에 사용하는 논리 주소(예: IP 주소)를 지정하고 송신자와 수신자 사이에 경로를 지정하는 역할을 수행합니다. 네트워크 계층의 데이터를 패킷(Packet)이라 부릅니다. 패킷에는 논리 주소 정보를 포함하고 있습니다.
전송 계층은 메시지를 프로세스 별로 구분하는 역할을 담당합니다. 따라서 발신지와 목적지의 프로세스 간의 메시지 전달 책임을 맡고 있는 것입니다. 따라서 전송 계층에서는 연결을 제어하고 흐름을 제어합니다. 전송 계층의 데이터는 메시지(Message)라 부릅니다. 메시지에는 서비스 지점 주소 정보와 연결 및 흐름 제어에 필요한 정보를 포함하고 있습니다.
세션 계층은 통신 시스템 사이에 대화를 설정하고 동기화 역할을 담당합니다. 그리고 표현 계층에서는 암호화 및 암축 및 부호화 역할을 수행하며 응용 계층은 실질적인 서비스(예: 전자 메일, 파일 전송)등을 담당합니다.
TCP/IP에서는 세션 계층과 표현 계층과 응용 계층은 하나의 프로토콜로 규정할 때가 많습니다.
[그림 2] 계층별 데이터
1.2 통신 모델과 TCP/IP 프로토콜
[그림 3] 통신 모델과 TCP/IP 프로토콜
인터넷 프로토콜 스위트는 OSI 모델에서 실제 역할에 맞게 상위 3계층을 응용 계층으로 통합하였습니다. 따라서 인터넷 프로토콜 스위트는 5 계층으로 구성하며 TCP/IP 5계층이라고도 부릅니다.
실제 TCP/IP는 미 국방성 산하기관인 DARPA에서 개발한 것으로 DoD 모델로 표현할 때 계층별로 프로토콜을 나누기 쉽습니다. DoD 모델에서는 물리 계층과 데이터 링크 계층이 네트워크 인터페이스(Network Interface) 계층입니다.
네트워크 인터페이스 계층에는 Ethernet, Token Ring 프로토콜 등이 있습니다.
인터넷 계층에는 호스트 주소를 지정하는 IP 프로토콜, 주소를 변환하는 ARP와 RARP 프로토콜, IP 프로토콜 제어를 담당하는 ICMP, 멀티캐스팅을 지원하는 IGMP, 라우팅 프로토콜인 OSPF 등이 있습니다.
전송 계층에는 신뢰성 있는 스트림 방식의 TCP 프로토콜과 데이터 그램 방식의 UDP 프로토콜이 있습니다. 이 책에서는 TCP, UDP 프로토콜을 다룹니다.
응용 계층에는 도메인 네임 서비스를 제공하는 DNS 프로토콜, 동적 호스트 설정 서비스를 제공하는 DHCP 프로토콜, 가상 터미널 서비스를 제공하는 TELNET 프로토콜, 파일 전송 서비스를 제공하는 FTP 프로토콜, 웹에서의 하이퍼텍스트 전송 서비스를 제공하는 HTTP 프로토콜, 메시지 전송 서비스를 제공하는 SMTP 등이 있습니다.
2. Ethernet 프로토콜
ethernet은 OSI 모델을 기준에서 데이터 링크 계층을 담당합니다. ethernet은 물리 계층과 데이터 링크 계층의 통신 회선의 접근 제어를 정의하는 IEEE 표준으로 IEEE 802.3 규약이 대표적입니다.
ethernet은 빛의 매질로 생각했던 에테리(Ether)에서 유래하였고 근거리 통신망(LAN)에 사용하기 위해 개발한 기술입니다. 지금은 IEEE 802.3 규약으로 표준화하였고 WAN과 LAN에서 모두 활용하고 있습니다.
ethernet은 네트워크 장치마다 부여하는 mac 주소를 가지고 실제 물리 회선을 통해 주고 프레임을 주고 받는 것을 담당합니다. CSMA/CD(Carrier Sense Multiple Access with Collision Detection) 논문이 나오면서 네트워크를 같이 사용하여 발생하는 충돌을 회피하는 방법을 규정하고 있습니다. 논문에 따르면 충돌을 방지하기 위해 최소 프레임 길이를 64비트로 정의하였습니다.
표준 ethernet에서 1비트를 전송하는 최대 전파 시간은 25.6 마이크로 초입니다. 따라서 1 비트를 전송하고 수신하는데 걸리는 시간은 51.2 마이크로 초입니다. 표준 ethernet이 10Mbps이므로 이를 계산하면 64바이트가 필요합니다. 참고로 bps는 bit per seconds입니다.
10000000 bit/sec X 51.2 마이크로 초 = 512bits = 64bytes
[그림 1] CSMA/CD 방식의 흐름
전송할 통신 개체는 먼저 통신 회선에 전송 중인 트래픽이 존재하는지 확인합니다. 트래픽이 없을 때는 프레임을 전송합니다. 하지만 트랙픽을 감지하면 일정 시간 대기하였다가 다시 트래픽이 존재하는지 확인합니다. 이 때 충돌 방지를 위해 프레임의 최소 크기를 정한 것입니다.
참고로 전이중(Full duplex) 모드는 충돌이 없어서 CSMA/CD를 이용하지 않고 반이중(Half duplex) 모드에서만 사용합니다.
2.1 CSMA/CD(Carrier Sense Multiple Access with Collision Detection)
망을 같이 사용하는 특징으로 충돌을 회피하기 위한 방법에 관한 규정
충돌을 방지하기 위해 최소 프레임 길이를 64바이트로 정의하였음(loop back은 관계없음)
표준 이더넷에서 1bit를 전송하는 최대 전파 시간은 25.6 마이크로 초이다.
따라서 1비트를 전송 및 수신하는데 걸리는 시간은 52.6 마이크로 초이다.
그리고 표준 이더넷은 10Mbps(10000000 bit per seccond)이다.
10000000 bit/sec X 52.6 마이크로 초 = 512bit = 64byte
참고로 전이중 모드는 충돌이 없어서 CSMA/CD를 이용하지 않고 반이중 모드에서만 사용한다.
3. 데이터 전송률
표준(10Mbps), 고속(100Mbps_Fast Ethernet), 기가(1Gpbs_Gigabit Ethernet), 10기가(10Gpbs)
LAN 프로토콜 : IEEE 802.3 이더넷 프로토콜, IEEE 802.4 토큰버스 프로토콜, IEEE 802.5 토큰링 프로토콜 등
4. 표준 이더넷(10Mbps) 기준
1) 프로토콜 스택
dest MAC (6 bytes) |
src MAC (6 bytes) |
type (2 bytes) |
2) MAC
IEEE에서는 데이터 링크 계층에 LLC(Logical Link Contorl, 논리적 연결 제어)와 MAC(Medium Access Control, 매체 접근 제어)로 구분하여 여러 종류의 물리계층을 표현할 수 있게 하였다.
PHY 계층: 전기, 기계적인 특성 (사용되는 동선 타입이나, 신호의 형태, 코드화 비트의 형태 등)
DLL(Data Link Layer): MAC 부계층과 LLC 부계층으로 나누어 지며, 이 계층은 에러없이 패킷을 전송하는 기능
• MAC 부계층 : 공유 미디어에 대한 접근의 조정(regulation)기능
• LLC 부계층 : 공유 미디어의 접근의 감독 기능
여기에서는 MAC부터 다를 것이다. MAC 주소의 마지막 값이 홀수는 유니캐스트이고 짝수는 멀티 캐스트를 나타낸다.
모든 비트가 1이면 브로드캐스트이다.
3) type
@ 0000-05DC IEEE802.3 Length Field (0.:1500.)
+ 0101-01FF Experimental
...
...
아래 링크 참조
참고 사이트: http://www.cavebear.com/archive/cavebear/Ethernet/type.html
4) 표준 프로토콜에 맞게 구현한 소켓 라이브러리를 사용.
통신 모델
통신 프로토콜
네트워크 패킷 수집 분석
5. Ethernet 프로토콜 스택
[그림 1] ethernet 프로토콜 스택
ethernet 프로토콜 스택은 목적지 mac 주소, 발신지 mac 주소와 L3 타입 정보로 구성합니다.
ethernet의 mac 주소는 6바이트이며 표기할 때는 12:34:56:78:9a:bc 처럼 1바이트씩 16진수로 나타내고 사이에 콜론(:)을 붙여 나타냅니다.
L3타입은 통신에 사용하는 네트워크 계층 프로토콜을 나타내며 IPv4는 0x0800이며 ARP는 0x806입니다. 다음은 네트워크 계층 프로토콜에 따른 L3 타입의 값입니다.
6. IPv4 프로토콜
인터넷 프로토콜(IP)은 TCP/IP 통신에서 네트워크 계층을 담당하고 있습니다. 이는 TCP/IP 통신에서 네트워크 엔터티를 구분하는 주소를 결정하는 역할을 담당함을 의미합니다.
IP 프로토콜에서는 패킷 교환 방식으로 목적지까지 패킷을 전달합니다. 이는 전송자와 수신자 사이에 연결을 유지하지 않는 상태에서 패킷 단위로 전송함을 의미합니다. 이로 인해 보낸 순서와 수신한 순서가 바뀔 수도 있고 제대로 전송하지 못하는 패킷이 존재할 수도 있습니다. 하지만 이로 인해 발생하는 문제를 해결하는 것은 IP 프로토콜에서 처리하는 않고 상위 계층인 전송 계층 프로토콜(TCP, UDP)에서 처리합니다.
또한 IP 패킷을 전송할 때 망에 따라 한 번에 전송할 수 있는 최대 패킷의 크기가 다른 특징으로 인하여 원래 하나의 패킷으로 보내려고 했던 것을 여러 개로 분할하여 보내야 할 때도 있습니다.
인터넷 프로토콜에서 호스트를 구분하는 IPv4 주소에 관하여 소개하고 난 후에 IP 프로토콜 스택 및 트래픽 분석
6.1 IPv4 주소
IPv4의 주소는 32비트(4바이트)의 길이를 갖고 있습니다. 그리고 IPv4 주소를 표현할 때는 “123.45.67.89”처럼 1바이트씩 나누에 4개의 값을 점으로 구분하여 표시를 합니다. 따라서 4개의 각 부분은 0에서 255 사이의 값을 갖는 것입니다.
그리고 IPv4의 주소는 같은 네트워크에 있는 호스트들은 같은 값을 갖는 네트워크 주소와 호스트를 구분하기 위한 호스트 주소로 구분합니다. 그리고 네트워크의 크기에 따라 호스트의 개수를 다를 수 있게 CLASS A에서 CLASS E까지 정의하고 있습니다. 처음으로 0인 값이 나오는 비트의 자리가 맨 앞이면 A클래스 두번째이면 B클래스, 세번째이면 C클래스입니다.
따라서 A 클래스는 주소의 첫번째 값이 0~127이며 B클래스는 128~191, C클래스는 192~223, D클래스는 224~239, E클래스는 240~으로 시작합니다.
특별히 D클래스는 동시에 여러 호스트에게 전송하기 위한 멀티캐스트 용도로 사용하는 주소이며 E클래스는 실험적으로 사용하기 위한 주소입니다.
[그림 1] IPv4 주소 체계
[그림 1]처럼 클래스 A클래스는 호스트 주소를 구분하는 영역이 24비트여서 제일 많은 호스트로 구성하는 네트워크에 사용할 수 있어 국가나 대형망에 사용합니다. B클래스는 중대형 망에 사용하며 호스트 주소는 16비트입니다. C클래스는 소규모 망에서 사용하며 호스트 주소는 8비트입니다.
또한 각 클래스에서는 사설망에 사용하는 사설 IPv4 주소를 제공하고 있습니다. 이는 IPv4의 주소 고갈을 지연하는데 큰 역할을 하였습니다. A클래스에서는 10.0.0.0~10.255.255.255 범위, B클래스에서는 172.16.0.0~172.31.255.255 범위, C클래스에서는 192.168.0.0~192.168.255.255 범위입니다.
*참고
프로토콜 스택
0~7 | 8~15 | 16~23 | 24~31 | |
VER(4) | HLEN(4) | Service Type(8) | Total length(16) | |
Identification(16) | Flags(3)+Fragmentaion offset(13) | |||
Time To Live(8) | Protocol(8) | Header Checksum(16) | ||
Source IP Address(32) | ||||
Destination IP Address(32) | ||||
Options and Padding(0~40 바이트) |
- VER
버전 , IPv4의 버전은 항상 4이다.
- HLEN
헤더 길이, 4바이트 단위로 계산하며 최소 5(20바이트)에서 최대 15(60바이트)이다.
- Service Type
초기에 TOS(Type Of Service)라 불렀다.
IEFT에서는 우선순위와 서비스 유형을 사용하는 것으로 수정하였다.
현재는 Differentiated Serivces(차별화 서비스 ) 영역으로 부르기도 한다.
Code Point(6bits) | Unused(2bits) |
Code Point가 XXX000이면 우선 순위를 의미한다. 0(000000)~7(111000)
Code Point가 XXXXX0이면 IETF에서 서비스 의미를 부여
Code Point가 XXXX01이면 임시 실험용
Code Point가 XXXX11 이면 지역 기관에서 서비스 의미를 부여
- Total length
전체 길이를 바이트 단위로 나타낸다. 최소 20, 최대 65535
Data Length = Total length – (HLEN*4)
- Identification
IP 패킷을 구분하기 위해 부여하는 번호로 단편화 패킷을 조립할 때 이용
- Flags
처음 비트는 사용하지 않음, 두번째 비트는 DF, 세번째 비트는 MF
DF가 1이면 단편화할 수 없음, 0이면 단편화 가능
만약 DF가 1인 패킷이 MTU(Maximum Transmit Unit)보다 크면 이를 폐기
ICMP 오류 메시지(Type 3, Code 4)를 발신지 호스트에 보낸다.
ICMP 오류 메시지(Type 3, Code 4)를 받으면 패킷을 단편화하여 보낸다.
DF가 0, MF가 1이면 마지막 단편이 아님
MF가 0이면 단편화 패킷이 아니거나 마지막 단편임
참고로 하나의 패킷을 단편화하면 이들의 Identification는 같다.
- Fragmentaion offset
단편화 패킷이 원래 패킷의 어느 위치의 단편인지를 나타낸다.
단위는 8바이트이다.
예를 들어 4000크기의 패킷을 1000씩 네개로 나누어 보내면
단편화 offset이 0, 125, 250, 375인 단편을 만들어 보낸다.
단편 패킷이 도착하면 목적지 호스트는 타이머를 가동한다.
타이머가 만료하였는데 도착하지 않으면 목적지 호스트는 ICMP 오류(type11, code1)을 보낸다.
- Time To Live
경유할 수 있는 최대 라우터 수를 의미한다.
라우터를 거칠 때마다 1씩 감소한다.
TTL이 1인 패킷을 받은 라우터는 이를 폐기하고 ICMP 오류(type 11, code 0)를 보낸다.
Protocol: ICMP(1), IGMP(2), TCP(6), UDP(17), OSPF(89)
Header Checksum: 패킷이 유효함을 계산하기 위한 필드, 헤더 부분만 계산한다.
C
// reference Unix Network Programming written by Stevens u_short cal_checksum(u_short *base,int len){ int nleft = len; int sum = 0; u_short *w = base; u_short answer = 0; while(nleft>1){ sum += *w; w++; nleft -= 2; }//while if(nleft == 1){ *(u_short *)(&answer) = *(u_char *)w; sum += answer; }//if sum = (sum>>16) + (sum & 0xFFFF); sum += (sum >>16); answer = ~sum; return (answer); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// reference Unix Network Programming written by Stevens u_short cal_checksum(u_short *base,int len){ int nleft = len; int sum = 0; u_short *w = base; u_short answer = 0;
while(nleft>1){ sum += *w; w++; nleft -= 2; }//while
if(nleft == 1){ *(u_short *)(&answer) = *(u_char *)w; sum += answer; }//if
sum = (sum>>16) + (sum & 0xFFFF); sum += (sum >>16); answer = ~sum; return (answer); } |
- Source IP Address
발신지 주소
- Destination IP Address
목적지 주소
- Options
네트워크를 시험하거나 디버그하기 위해 사용
Type(8bits) | Length(8bits) | Value(Length bits) |
Type: Copy(1), Class(2), Number(5)로 구분
Copy: 0 – 단편화 패킷일 때 첫 번째 단편에만 옵션 포함
1 – 단편화 패킷일 때 모든 단편에 옵션 포함
Class: 00 – 제어에 사용, 10 – 디버그 및 관리 목적, 01, 11 – 정의하지 않음
Number: 여섯 종류의 옵션 유형을 정의
00000 : End of option, 이것에는 Length, Value가 없다. 이후에는 padding 부분이다.
00001: No option, 옵션과 옵션 사이에 올 수 있다.
00011: Loose source route, 느슨한 발신지 경로 옵션
발신지에서 경로를 미리 지정하며 지정하지 않은 라우터도 경유할 수 있다.
예를 들어 세 개의 라우터를 지정하여 보내면 다음과 같이 변한다.
발신지 초기 :10000011 00001111 0000100 XXXXXXXX XXXXXXXX XXXXXXXX 1번째 라우터:10000011 00001111 0001000 XXXXXXXX XXXXXXXX XXXXXXXX 2번째 라우터:10000011 00001111 0001100 XXXXXXXX XXXXXXXX XXXXXXXX 3번째 라우터:10000011 00001111 0010000 XXXXXXXX XXXXXXXX XXXXXXXX
1 2 3 4 |
발신지 초기 :10000011 00001111 0000100 XXXXXXXX XXXXXXXX XXXXXXXX 1번째 라우터:10000011 00001111 0001000 XXXXXXXX XXXXXXXX XXXXXXXX 2번째 라우터:10000011 00001111 0001100 XXXXXXXX XXXXXXXX XXXXXXXX 3번째 라우터:10000011 00001111 0010000 XXXXXXXX XXXXXXXX XXXXXXXX |
00100: Timestamp, 라우터가 처리 시간을 기록하기 위해 사용
Type(01000100), Length, Pointer, Overflow, Flags와 데이터로 구성
Overflow에는 더 이상 기록하지 못한 라우터의 수를 의미한다.
Flags 0일 때 데이터에 시간만 기록
Flags 1일 때 출력 인터페이스 IP 주소와 타임 스탬프 기록
Flags 3일 때 주어진 IP 주소와 입력 인터페이스 IP를 비교
같으면 출력 인터페이스 IP를 덮어쓰고 타임스탬프를 기록
00111: Record route, 거쳐간 라우터를 기록한다.
type: 00000111
Length:15
Pointer: 이번에 기록할 바이트 옵셋(처음은 4)
라우터를 거칠 때마다 라우터 주소를 기록하고 Point값이 4증가한다.
만약 패킷이 다음과 같다면 세 개의 라우터를 경유한 것이다.
00000111 00001111 00010000 XXXXXXXX XXXXXXXX XXXXXXXX
01001: Strict source route, 엄격한 발신지 경로 옵션이다.
발신지에서 경로를 미리 지정하며 지정하지 않은 라우터를 경유할 수 없다.
리스트에 없는 라우터를 방문하면 데이터 그램은 폐기한다.
그리고 ICMP 오류 메시지(type3, code 5)를 보낸다.
예를 들어 세 개의 라우터를 지정하여 보내면 다음과 같이 변한다.
발신지 초기 : 10001001 00001111 0000100 XXXXXXXX XXXXXXXX XXXXXXXX 1번째 라우터: 10001001 00001111 0001000 XXXXXXXX XXXXXXXX XXXXXXXX 2번째 라우터: 10001001 00001111 0001100 XXXXXXXX XXXXXXXX XXXXXXXX 3번째 라우터: 10001001 00001111 0010000 XXXXXXXX XXXXXXXX XXXXXXXX |
Padding: 헤더의 길이가 4(옥텟 단위)의 배수가 아니면 4의 배수가 되도록 맞춘다.
7. TCP(Transmission Control Protocol,RFC 675, RFC 793)
TCP는 UDP와 다르게 Stream기반의 프로토콜이다. 스프림 기반인 TCP는 송신 버퍼와 수신 버퍼 사이에 가상의 통로를 갖고 있으며 신뢰성있는 통신을 제공한다.
참고: RFC 793, https://www.ietf.org/rfc/rfc793.txt
위키 백과 전송 제어 프로토콜, http://en.wikipedia.org/wiki/TCP
프로토콜 스택
0~7 |
8~15 |
16~23 |
24~31 |
|||||||||
Source Port |
Destination Port |
|||||||||||
Sequence no. |
||||||||||||
Acknowledgment no. |
||||||||||||
HDLEN(4) |
Reserved (3) |
N S |
C W R |
E C E |
U R G |
A C K |
P S H |
R S T |
S Y N |
F I N |
Window Size |
|
Checksum |
Urgent pointer |
|||||||||||
Options(0~320 bits) |
Source Port: 발신지 포트
Destination Port:목적지 포트
Well Known Ports:
7(Echo), 9(Discard), 11(Users), 13(daytime), 17(Quote), 19(Chargen), 20(FTPD), 21(FTP),
23(TELNET), 25(SMTP), 53(DNS), 67(Bootps), 79(Finger), 80(HTTP)
68(Bootpc), 69(TFTP), 111(RPC), 123(NTP), 161(SNMP), 162(SNMP)
Sequence no.: 시작할 때 Random Num로 ISN(Initial Sequence Number) 설정,
ISN + 세그먼트에 포함하는 첫 번째 데이터의 바이트 번호
예: ISN이 1000일 때 첫 번째 세그먼트의 seq는 1000,
첫 번째 세그먼트의 크기가 150일 때 두 번째 세그먼트의 seq 1150
주의) SYN가 1일 때 데이터 크기가 없어도 순서 번호를 1 증가한다.
FIN, ACK가 1일 때 순서 번호를 1 증가한다.
Acknowledgment no.: 받은 세그먼트의 seq + 받은 데이터 바이트
HDLEN: TCP 헤더 길이(단위 4바이트), 이 값으로 데이터의 위치를 계산할 수 있다.
예: HDLEN이 5일 때 헤더 길이는 20
Reserved: all 0s
NS: ECN nonce concealment protection (RFC 3540, http://tools.ietf.org/html/rfc3540)
송신자에서 CWR, ECE 필드를 실수 혹은 악의적으로 은폐를 보호하기 위해 추가하였음
CWR: ECE를 수신하여 전송 윝도우 크기를 줄였으니 더 이상 ECE를 보내지 말라는 의미
ECE: ECN Echo
SYN이 1일 때는 ECN을 사용할 것임을 의미함
SYN이 0일 때는 트래픽이 혼잡하니 전송 윈도우 크기를 줄이라는 의미
URG: 수신한 세그먼트의 순서가 어긋났을 때 Urgent Pointer가 유효함을 의미
ACK: 수신 패킷, 클라이언트가 보낸 최초의 SYN 패킷 이후의 모든 패킷은 설정
Selective ACK – TCP 헤더 끝에 옵션으로 순서에 어긋나게 들어오거나 중복으로 온 것을 알림
전송 후 RTO 타이머(보통 500ms)를 구동하여 타임 아웃까지 ACK를 수신하지 못하면 재전송
지연 ACK -RTO 타임 아웃 이후에 수신한 ACK를 지연 ACK라 부른다.
이로 인해 수신 측에 중복 세그먼트 현상이 발생할 수 있다.
PSH: 푸시 기능
RST: 명확한 연결 해제
연결 요청을 거절할 때, WAIT 상태의 연결을 종료할 때, 연결을 중단할 때
SYN: TCP 연결 과정인 Three Handshake의 두 개의 패킷
FIN: 송신 측 데이터가 더 이상 없음을 의미
Window Size: 수신 측에서 크기를 결정하고 송신 측에서는 이를 따른다.
초기에 수신 버퍼 크기를 설정하고 이 값을 사용
수신 버퍼에 처리하지 않은 세그먼트 바이트를 뺀 값으로 설정
윈도우 사이즈가 0일 때 수신할 수 없음, 공격으로 의심할 수 있다.
Silling Window, Nagle 알고리즘, Clark 알고리즘, Delayed Acknowledgement
Slow Start – 초기 Window size를 MSS로 설정, 수신 후에 MSS만큼 증가
물론 실제 수신할 수 있는 크기보다 커질 수 없으며 이 후에는 일반적인 알고리즘 적용
혼잡 회피 알고리즘을 가미하여 MSS만큼 증가시키지 않고 1씩 증가
RTO 타임 아웃에 의해 지연 인지 시
최대 윈도우 사이즈 임계값을 현재 윈도우 사이즈/2 로 변경
전송 윈도우 사이즈를 MSS로 줄임
다시 Slow Start
세 개의 ACK 수신하면
최대 윈도우 사이즈 임계값을 현재 윈도우 크기 2배으로 설정
cwnd(전송 윈도우)의 값을 임계치의 값으로 설정
혼잡 회피 알고리즘 시작
RTO 조절 – 손실 하면 RTO값을 2배로 늘림
전송이 성공하면 이 후의 RTO는 초기 RTO값을 사용한다.
TCP Probe – Window size가 0을 가진 세그먼트를 수신하면 Persistence Timer 가동,
Persistence 타임 아웃 시 발송하는 세그먼트
수신 측으로부터 확인 응답을 받지 못하면 영속 타이머 값을 2배로 늘림(보통 60초까지)
Keepalive 타이머 – 보통 2시간동안 TCP Probe를 보내도 확인 응답을 받지 못하면 연결을 종료
Checksum: IP 주소와 프로토콜, TCP 길이를 포함하여 체크섬을 계산한다. UDP 체크섬과 방법은 같으며 프로토콜 번호만 6이다.
0~7 |
8~15 |
16~23 |
24~31 |
Source IP Address |
|||
Destination IP Address |
|||
All 0s |
6 |
UDP Total Length |
|
Source Port |
Destination Port |
||
Length |
Checksum |
||
Data |
Urgent pointer: URG 플래그가 1일 때만 유효하다.
이 필드의 값과 순서 번호를 더하면 마지막 긴급 바이트 번호를 알 수 있다.
데이터 영역의 시작 위치에서 이 필드의 값을 더한 위치에 일반 데이터 배치 가능
Options: 최대 40바이트(4바이트의 배수로 채워짐)
End of option list(1바이트): 00000000
옵션 구간의 끝에 붙는 패딩에 사용, 다음 옥텟에 데이터가 있음
No operation(1바이트): 00000001
단순히 옥텟 단윌로 옵션을 채우기 위해 사용
MSS(4바이트) : 00000010 + 길이(1바이트) + MSS(2바이트)
연결 단계에서 결정(디폴트 값은 536)
Window Scale(3바이트): 00000011 + 길이(1바이트) + Scale(1바이트)
Scale 값은 2의 승수를 의미하며 윈도우 크기를 확장할 때 사용
연결 설정 단계에서만 결정
Timestamp(10바이트): 00001000 + 길이(1바이트) + Timestamp (4바이트) + Timestamp reply(4바이트)
SYN 내에 타임 스템프를 알리고 SYN, ACK에 타임 스템프 reply
왕복 시간을 측정 위해 사용, 서버에서 SYN, ACK에 타임 스템프 replay를 안 보내면 거절
SACK permitted(2바이트): 00000100 + 길이(1바이트) + OK 여부(1바이트,0:거절, 1: 허락)
SYN 내에 SACK 옵션을 제공할 수 있음을 전달
수신 측에서 SYN, ACK에 SACK 옵션을 추가하면 양쪽이 SACK 옵션 사용
SACK(가변길이): 00000101 + 길이(1바이트) + 1'st edge(8바이트) + ...+ nth edge
edge – start seq(4바이트) + end seq(4바이트)
'1. 프로그래밍 > 4) Network' 카테고리의 다른 글
Chapter 1 서버-클라이언트 소스코드 분석 (0) | 2019.10.28 |
---|---|
윤성우의 열혈 TCP/IP 프로그래밍 pdf 사이트 (0) | 2019.09.19 |
#4 리눅스 네트워크 프로그래밍 (0) | 2019.06.18 |
#3 TCP/IP 송수신 과정 (0) | 2019.06.17 |
#2 Ethernet, IP, TCP/UDP 헤더 소개(Packet Header: Ethernet, IP & TCP/IP) (0) | 2019.06.13 |