C에서 구현한 TCP 헤더
#include <linux/tcp.h>
struct tcphdr {
__be16 source;
__be16 dest;
__be32 seq;
__be32 ack_seq;
#if defined(__LITTLE_ENDIAN_BITFIELD)
__u16 res1:4,
doff:4,
fin:1,
syn:1,
rst:1,
psh:1,
ack:1,
urg:1,
ece:1,
cwr:1;
#elif defined(__BIG_ENDIAN_BITFIELD)
__u16 doff:4,
res1:4,
cwr:1,
ece:1,
urg:1,
ack:1,
psh:1,
rst:1,
syn:1,
fin:1;
#else
#error "Adjust your <asm/byteorder.h> defines"
#endif
__be16 window;
__sum16 check;
__be16 urg_ptr;
};
source: 출발지 포트 번호
dest: 도착지 포트 번호
seq: sequence 번호
ack_seq: acknowledgment 번호
--아래는 Little-Endian 필드 순서에 맞춤
res1: 예약필드, 0으로 초기화
doff: 헤더의 길이로 4바이트 단위(ex, doff=5 -> 20바이트, 최대 15, 60바이트 까지만)
fin: Finish, 연결을 종료하고 싶을 때 사용
syn: Synchronize, TCP 연결설정 초기화를 위한 seq번호의 동기화 시 사용
rst: Reset, 강제 연결 초기화 시 사용
psh: Push, 수신측에 버퍼링된 데이터를 상위 계층으로 올려보낼 것을 요구 혹은 단편화된 마지막 데이터
ack: Acknowledgment, 정상적으로 확인 하였음을 알릴 때 사용
urg: Urgent, urg_ptr이 가리키는 세그먼트 번호까지 긴급 데이터를 포함하였을 때 사용
ece: Explicit Congestion Notification, 혼잡함을 알릴 때 사용
cwr: Congestion Window Reduced, window 크기 감소 시 사용
--
window: 송신자의 가능한 바이트 단위의 수신 버퍼 크기
check: TCP 체크섬
urg_ptr: 긴급 데이터의 마지막 바이트 위치
UDP 헤더
#include <linxu/udp.h>
struct udphdr {
__be16 source;
__be16 dest;
__be16 len;
__sum16 check;
};
source: 출발지 포트 번호
dest: 도착지 포트 번호
len: 데이터를 포함한 헤더 길이
check: UDP 체크섬
참조
http://www.ktword.co.kr/abbr_view.php?m_temp1=2437
'리눅스 커널 > 네트워크' 카테고리의 다른 글
Raw socket incoming packet capture (0) | 2021.10.24 |
---|---|
Ethernet & ARP Header (0) | 2021.10.24 |
IP & ICMP Header (0) | 2021.10.24 |
ioctl - socket (0) | 2021.10.24 |
struct net_device example (0) | 2021.10.24 |