본문 바로가기

리눅스 커널/네트워크

TCP & UDP Header

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 체크섬

 

참조

https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-19%ED%8E%B8-TCP-Header-4%EA%B3%84%EC%B8%B5-TCP-%ED%97%A4%EB%8D%94-%EA%B5%AC%EC%A1%B0

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