Ethernet
- 컴퓨터 네트워크 기술의 하나로, 물리 계층와 데이터 링크 계층으로 나뉜다.
- 물리 계층 => 신호와 배선 정의
데이터링크 계층 => MAC 패킷과 프로토콜의 형식 정의
Ethernet 헤더 구조
Destination MAC( 6 bytes ) | Source MAC ( 6 bytes ) | Type ( 2 bytes ) |
목적지 주소 | 출발지 주소 | 상위 계층 Protocol 종류 구분 ( IP : 0x0800, ARP : 0x0806 등 ) |
IP ( Internet Protocol )
- 컴퓨터가 갖게 되는 주소
- Wifi가 달라질 때마다 얻는 주소가 달라진다.
- 비신뢰성, 비연결성 통신이다.
비신뢰성 => 흐름에 관여하지 않기 때문에 보낸 정보가 제대로 갔는지 보장 X
ex) 전송 과정에서 패킷이 손상되거나, 전송한 패킷의 순서가 뒤죽박죽이거나, 같은 패킷이
두 번 전송될 수도 있다. - 신뢰성을 보장하기 위해선 IP의 상위 프로토콜인 TCP를 사용해야 한다.
IP 헤더 구조
Version : IP의 버전을 나타냄 ( IPv4 / IPv6 )
IHL : IP헤더의 길이
TOS : 서비스의 우선 순위를 제공
Total Length : ethernet패킷과 패킷 끝에 필요없는 부분을 제외한 순수 IP 패킷의 길이
Identification : 분열이 발생했을 때 원래의 데이터를 식별하기 위해서 사용
Fragment Flags ( IP Flags )
- x : 항상 0으로 설정
- D : 분열 여부를 나타냄 ( 0 => 분열 가능, 1 => 분열 방지 )
- M : 분열될 조각이 더 있는지 판단 ( 0 => 마지막 조각, 1 => 분열될 조각 더 있음 )
Fragment Offset : 8바이트 offset으로 조각에 저장된 원래 데이터의 바이트 범위 나타냄
TTL : 데이터를 전달할 수 없는 것으로 판단되어 소멸되기 이전에 데이터가 이동할 수 있는 단계의 수
Protocol : 상위계층 프로토콜 표시 ( TCP : 6, UDP : 17 )
Header Checksum : IP header의 체크섬을 저장
Source Address : 출발지 IP 주소
Destination Address : 목적지 IP 주소
TCP
- 데이터를 송수신하기 위해 IP를 사용하는 프로토콜
- 데이터를 세그먼트 단위로 잘게 쪼개서 전송한 후 데이터를 받은 도착지에서
다시 재조립하는 과정을 거친다.
TCP 헤더 구조
Source Port : 데이터를 전송하는 곳의 포트번호
Destination Port : 목적지의 포트번호 ( 80 : HTTP, 443 : HTTPS )
Sequence Number : 데이터 byte의 고유한 일련번호. 이를 이용하여 순서를 올바르게 배열한다.
Acknowldegement Number
- 다음 세그먼트 수신 준비가 되었다는 여부와 수신이 완료되었다는 확인 메시지 전달
Offset ( = Header Length )
- 필드값 * 4 = TCP Header 길이
Reserved : 차후 사용을 위한 예약 필드
TCP Flags
- TCP flag는 비트로 되어 있기 때문에 flag를 체크해 줄 때 비트 연산자를 써야 한다.
ex) if(tcphdr->th_flags & TH_RST ) 이런 식으로 비트연산자(&,|,^ 등등) 을 써서 확인해야 한다.
SYN : 연결 요청 플래그 ( 통신 시작시 세션을 연결하기 위한 플래그 )
ACK : 응답 플래그 ( 송신측으로부터 패킷을 잘 받았다는 걸 알려주기 위한 플래그 )
FIN : 연결 종료 플래그 ( 세션 종료 )
RST : 연결 재설정 플래그 ( 강제 연결 종료 )
PSH : 넣기 플래그 ( 버퍼가 채워지기를 기다리지 않고 받는 즉시 전달 )
-> 버퍼링 없이 7계층의 응용프로그램에게 바로 전달한다.
URG : 긴급 데이터 플래그
Window Size : 송신 시스템의 수신 버퍼의 크기를 바이트 단위로 나타냄
Checksum : TCP 세그먼트 내용이 유효한지 확인 및 손상 여부 검사
※ 데이터 수신 측 (receiver) 이 필요한 정보 => window size, Acknowledgement Number
'TCP, IP 네트워크 프로그래밍' 카테고리의 다른 글
TCP 통신 (0) | 2022.02.03 |
---|