Download presentation
1
통신 프로토콜 김영준
2
계층 구조 BSD socket INET socket TCP UDP IP PLIP SLIP ETHERNET ARP
Parallel port Serial port Ethernet card
3
BSD socket 대표적인 소켓 인터페이스 socket() 프로토콜을 선택하는 인터페이스
bind() 보내는 호스트와 응용을 선택 connect() 목적지 호스트 주소와 응용을 선택 accept() 서버가 통신 요청을 받아들일 때 listen() 서버가 동시에 몇 개의 서비스 요청을 결정할 때 send() , recv() 사용자는 프로토콜 패밀리(도메인) 선택 INET(TCP/IP), UNIX, IPX, APPLETALK, X25, AX25
4
INET socket & TCP/UDP INET socket - 소켓의 type 설정
Stream, Datagram, Raw, Reliable Delivered Messages UDP – connectionless protocol 패킷을 전송할 때 목적지에 안전하게 도착했는지 신경 X TCP – connection oriented protocol 일련의 패킷에게 seq number, ack number 설정, State 유지, 데이터가 정확하게 수신되었는지 확인
5
IP IP 주소를 사용하여 통신, 자신의 고유한 4octets IP 주소를 갖는다.
/etc/hosts or DNS 를 통해 알 수 있다. Checksum, fragmentation, 다른 호스트로 forwarding 수행, queue discipline에 따라 패킷 흐름 제어(shaping)
6
데이터 encapsulation Ethernet frame IP packet TCP message
Destination ethernet address Source ethernet address Protocol Data CRC IP packet Version Transport Checksum Source IP address Destination IP address Data TCP message Source port Destination port SEQ ACK Data Application data Application header Data
7
/etc/services
8
주요 커널 내부 자료 구조 Linux는 계층 사이에서 제어가 전달될 때 자료 구조를 이용한 간접 호출 방법으로 통신 프로토콜을 구현 Direct func. Call X Indirect func. Call O 하위 층이 제공하는 함수의 시작 주소를 특정 자료 구조 (테이블) 로 등록, 상위 층은 이 자료구조에 등록된 함수를 호출 특징 상위 층과 하위 층간에 종속관계 X 내용 수정, 새로운 층 추가 시 커널 변경이 간단해 짐 소스코드는 복잡하고 분석 어려움
9
/* include/linux/skbuff.h */
통신 프로토콜이 사용하는 주요 자료 구조 VFS layer struct file_operations /* include/linux/fs.h */ BSD socket layer struct net_proto_family /* include/linux/net.h */ struct socket /* include/linux/net.h */ inet layer struct sock /* include/net/sock.h */ struct proto_ops /* include/linux/net.h */ struct sk_buff /* include/linux/skbuff.h */ transport layer struct tcp_opt /* include/linux/fs.h */ struct proto /* include/net/sock.h */ IP layer struct tcp_func /* include/net/tcp.h */ struct packet_type /* include/linux/netdevice.h */ device layer struct device /* include/net/netdevice.h */
10
Sock과 sock 자료 구조 file task dentry VFS layer BSD socket layer
srtuct sock { next, prev daddr, dport rcv_saddr, sport state … rmem_alloc recevie_queue wmem_alloc write_queue pair /*struct sock*/ prot /*struct proto*/ tp_pinfo dst_cache } … f_dentry f_pos f_op srtuct socket { state type flags ops /*proto_ops*/ sk /*struct sock*/ files, inodes next, wati, … } … fd_array[] srtuct dst_entry { … *dev ; *hh ; (*input) (*output) } dentry d_inode srtuct device { … } srtuct proto_ops { family dup, release, bind, connect, accept, listen, … getsockops setsockops sendmsg recvmsg } INET layer TCP layer IP layer Driver layer
11
sk_buff 자료 구조 /*include/linux/skbuff.h*/ struct sock
struct sk_buffer { next, prev struct sock *sk ; … /*TP layer header*/ union {th, uh, icmph, …} h ; /*Network layer header*/ union {iph, ipv6h, arph, …} h ; /*Data Link header*/ union {ethernet, raw} mac ; struct dst_entry *dst ; data, head, len } sk_buff head data … sk_buff head data … struct device sk_buff head data …
12
제어 흐름 : 데이터 전송 VFS BSD socket inet socket TCP IP Device Linux Kernel
/*fs/read_write.c*/ VFS sys_write() BSD socket /*net/socket.c*/ sock_write() inet socket /*net/ipv4/af_inet.c*/ inet_sendmsg() TCP /*net/ipv4/tcp_output.c*/ tcp_send_skb() IP /*net/ipv4/ip_output.c*/ ip_queue_xmit() Device /*driver/net/3c509.c*/ el3_start_xmit() Linux Kernel
13
제어 흐름 : 데이터 수신 VFS BSD socket inet socket TCP IP Device Linux Kernel
/*fs/read_write.c*/ VFS sys_read() BSD socket /*net/socket.c*/ sock_read() inet socket /*net/ipv4/af_inet.c*/ inet_recvmsg() wake up TCP /*net/ipv4/tcp.c*/ /*net/ipv4/tcp_input.c*/ tcp_recvmsg() tcp_v4_rcv() IP /*net/ipv4/ip_input.c*/ ip_recv() sleep Device /*driver/net/3c509.c*/ /*net/core/dev.c*/ net_bh() el3_interrupt() Linux Kernel
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.