Socket programming Tasos Alexandridis 1HY335a - Socket Programming.
Socket Programming
description
Transcript of Socket Programming
Socket Programming
Socket ProgrammingSocket ProgrammingTCP/IP TCP/IPSocketSocketClient/Server model()TCP SocketUDP SocketSocket Read/Write Inside OutPerformance Matters: Interrupt and Memory Copy at SocketOpen Source Implementation: Linux Socket Filter
TCP/IP TCP/IP Transmission Control Protocol / Internet Protocol (TCP/IP)ARPANET ARPANET
TCP/IP TCP/IP4
(Packet)Socket socket Linux
Socket
1Datagram sockets(connectionless) datagram socketsUDPsocket2Stream sockets(connection-oriented) stream socketsTCPsocketTCPTCP
Client/Server model socketsocketsstream(TCP)datagram(UDP)socket()NAME socket() - create an endpoint for communicationSYNOPSIS #include #include int socket(int domain, int type, int protocol);1. serverclient2. domain: AF_INET3. type: SOCK_STREAMSOCK_DGRAM4. protocol: 0 (socket()type)5. socket descriptor-1 (errnomacro)bind()NAME bind() - bind a name to a socketSYNOPSIS #include #include int bind(int sockfd, struct sockaddr *my_addr, int addrlen);1. server2. sockfdsocket()3. myaddr portipstruct sockaddr_instruct sockaddr4. addrlensizeof(struct sockaddr)5. bindlocalendpoint attachsocketconnect()NAME connect() - initiate a connection on a socket.SYNOPSIS#include #include int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);1. connect()client2. sockfdsocket()serv_addrserveripport3. addrlensizeof(struct sockaddr)listen()NAME listen() - listen for connections on a socketSYNOPSIS #include int listen(int sockfd, int backlog);1. server2. sockfdsocket()backlogqueueconnection (accept())3. -1accept()NAME accept() - accept a connection on a socketSYNOPSIS #include #include int accept(int sockfd, struct sockaddr *addr, int *addrlen);1. sockfd: listen()sockfd2. addr client3. addrlensizeof(struct sockaddr)4.-15. server listen()accept()accept()file descriptorconnectionI/Oaccpetserverlisten()fdconnectionsendto()int sendto(int sockfd, const void *msg, int len, int flags);1. sockfdlisten()fdaccpetfd2. msgdatalendata length (sizeof(msg))flag03. 4. -1recvfrom()The recvfrom() call is similar in many respects:int recvfrom(int sockfd, void *buf, int len, unsigned int flags);1. sockfd: fd2. 0connectionwrite()write()NAME write() - write to a file descriptorSYNOPSIS #include ssize_t write(int fd, const void *buf, size_t count);1. filedevicesocketread()read()NAME read() - read from a file descriptorSYNOPSIS #include ssize_t read(int fd, void *buf, size_t count);1. filedevicesocket2. datareadblock3. countreturnblockclose()close()NAME read() - read from a file descriptorSYNOPSIS #include int clode(int sockfd);1.close()0-1
TCP Socket
UDP Socket
socketsocketsocketsocketssocket
Socket Read/Write Inside outUser SpaceServerClientServer socket creationsend dataClient socket creationsend datasocket()bind()listen()write()accept()socket()read()connect()sys_listen
inet_listensys_write
do_sock_write
sock_sendmsg
inet_sendmsg
tcp_sendmsg
tcp_write_xmit
sys_socket
sock_create
inet_createsys_bind
inet_bind
sys_accept
inet_accept
tcp_accept
wait_for_connectionKernel Spacesys_socket
sock_create
inet_createsys_read
do_sock_read
sock_recvmsg
sock_common_recvmsg
tcp_recvmsg
memcpy_toiovecsys_connect
inet_stream_connect
tcp_v4_getport
tcp_v4_connect
inet_wait_connectsys_socketcallInternetsys_socketcallSocket Read/Write Inside out
Performance Matters: Interrupt and Memory Copy at Socket
Latency in transmitting TCP segments in the TCP layerLatency in receiving TCP segments in the TCP layerOpen Source Implementation: Linux Socket FilterLinux Socket Filter (net/core/filter.c)Similar to BPF (Berkley Packet FIilter)network monitornetwork monitorrarpdfilterfilterfilterbufferbufferbufferBPFprotocolstackuserkernellink-leveldriverlink-leveldriverlink-leveldrivernetworkkernelsocket()connect()write()read()close()socket()bind()listen()accept()read()write()read()close()connection establishment(TCP Three-way handshake)data (request)data (reply)end-of-life notificationprocess requestblocks until connection from client1. switch to passive socket2. create connection queueTCP ServerTCP Clientobtain a descriptorassign IP & port to the socketenter ESTABLISHED stateinitiate 3-way handshakeobtain a descriptorsocket()recvfrom()sendto()recvfrom()close()socket()bind()sendto()data (request)data (reply)process requestblocks until connection from clientobtain a descriptorUDP ServerUDP Clientobtain a descriptorassign IP & port to the socketsocket()recvfrom()sendto()recvfrom()close()socket()bind()sendto()data (request)data (reply)process requestblocks until connection from clientobtain a descriptorUDP ServerUDP Clientobtain a descriptorassign IP & port to the socketsocket()recvfrom()sendto()recvfrom()close()socket()bind()sendto()data (request)data (reply)process requestblocks until connection from clientobtain a descriptorUDP ServerUDP Clientobtain a descriptorassign IP & port to the socketcountfile_lockmax_fdsnext_fdmax_fdsetfd[0]fd[1]fd[255]KKlinux/sched.hstruct files_structKKf_dentryf_listmax_fdsf_opf_vfsmntf_countf_flagsf_modef_posd_flagsKKd_countd_inodeKKd_parentKKskKKKKlinux/fs.hstruct filelinux/dentry.hstruct dentrylinux/fs.hstruct inodeinodefileKKstruct socket
s_addrd_addrdportnet/sock.hstruct sockbound_dev_ifsportKKreceive_queuewrite_queueprotoKKKKstruct tcp_opt
union tp_pinfo
KKsnd_cwndKKKKsk_filterKKsocketKKconnectclosedisconnectioctlacceptinitdestoryshutdownsetsockoptgetsockoptnet/sock.hstruct protosendmsgrecvmsgKKtcp_v4_connecttcp_closetcp_disconnecttcp_ioctltcp_accepttcp_v4_init_socktcp_v4_destory_socktcp_shutdowntcp_setsockopttcp_getsockopttcp_sendmsgtcp_recvmsgKKipv4/tcp_ipv4.cstruct tcp_funcunion u
opened Linux socket