Socket Programming.

Slides:



Advertisements
Similar presentations
1 实验二、 TCP 、 UDP 通信程序设计实验 ——TCP 通信实验 注意 bind 和 listen socket() bind() listen() accept() write() read() TCP Server read() socket() TCP Client connect()
Advertisements

網路程式設計 (Network Programming)
第五章 網際網路 5-1 網際網路的歷史沿革 5-2 網際網路基本運作原理 5-3 連線媒介與連線上網 5-4 網際網路上的熱門應用
第 12 章 UDP 與 TCP.
第一章 概 述.
马志强 软件学院501室 网络应用开发 马志强 软件学院501室
Chapter 12 UDP 與 TCP.
第2章 计算机网络的协议与体系结构 2.1 计算机网络体系结构的形成 2.2 协议与划分层次 2.3 计算机网络的原理体系结构
计算机网络.
计算机网络 暨南大学计算机科学系 学年 第一学期.
第1章 概述.
Foundations of Computer Science Chapter 6 電腦網路
NetGuru 創新 網路通訊實驗教學解決方案 PART I TCP/IP通訊協定深入剖析/以NetGuru實作
计算机系统安全 第10章 常用攻击手段.
TCP Session Hijack 郭军权
Socket.
基于WinSock的邮件系统 1 设计目标: 1.1 SMTP发送邮件服务器(c语言) 1.2 POP3接受邮件服务器(c语言)
第5章 网络软件 开发技术 (一) 软件开发技术基础 计算机教学实验中心.
计算机网络实验介绍 信息网络实验室 2017/9/13 04:55:22.
传输层是整个协议层次的核心,其任务是在源机器和目标机器之间提供可靠的、性价比合理的数据传输功能,并与当前所使用的物理网络完全独立
Advanced Sockets Programming
第 12 章 UDP 與 TCP.
TCP、UDP 通信实践 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
第 13 章 DNS 著作權所有 © 旗標出版股份有限公司.
通訊協定 OSI分層模式 與 TCP/IP協定
chapter 1-Introduction
TCP協定 (傳輸層).
Socket Programming in C
Socket Programming.
第五章 網際網路 5-1 網際網路的歷史沿革 5-2 網際網路基本運作原理 5-3 連線媒介與連線上網 5-4 網際網路上的熱門應用
Socket 基本觀念.
Socket () and TCP client-server
TCP/IP Protocol Suite TCP/IP協定 第二組 投影片製作by簡嘉宏 綦凱宏 林睿敏 滕孟哲.
C#程序设计 c# programming 网络编程 C#程序设计课程组.
在一定程度上 人类的思维产生于 简单个体之间的相互作用 ——Marvin Minsky.
套接字API调用.
第十讲 TCP协议 协议概述 报文段格式 差错控制 流控和拥塞控制 TCP连接管理 TCP性能问题 TCP软件设计 2018/12/7
第4章 OSI傳輸層.
中国科学技术大学计算机系 陈香兰(0512- ) Autumn 2010
Echo Server/Client Speaker:Fang.
作業系統實習課(四) -檔案管理- 實驗室:720A 助教:鄧執中.
NS2 – TCP/IP Simulation How-Wei Wu.
第2章 套接字网络编程基础 2.1 UNIX套接字网络编程接口的 产生与发展 2.2 套接字编程的基本概念 2.3 面向连接的套接字编程
網際網路與電腦應用 林偉川 2001/11/08.
第 12 章 UDP 與 TCP 著作權所有 © 旗標出版股份有限公司.
Linux 文件操作——系统调用和标准 IO 库
2010電資院 「頂尖企業暑期實習」 經驗分享心得報告
網路安全技術 OSI七層 學生:A 郭瀝婷 指導教授:梁明章.
Topic Introduction—RMI
Networking Games 程式設計 潘仁義 CCU COMM.
第7章 传输层协议——TCP与UDP 任课教师 卢豫开.
Westmont College 网络互连 Part 4 (传输协议, UDP and TCP, 协议端口)
Web Server 王宏瑾.
Westmont College 网络应用软件 第一讲 (客户-服务器 概念, 协议端口的使用, 套接字API)
Advister: Quincy Wu Speaker: Chenglin Tsai Date:3/26
3.1 通訊協定 3.2 開放系統參考模式(OSI) 3.3 公眾數據網路 3.4 TCP/IP通訊協定
DQMClientDim.cxx及双光子练习
Source: Journal of Network and Computer Applications, Vol. 125, No
Speaker : Chang Kai-Jia Date : 2010/04/26
面向非连接的 SOCKET编程 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
SOCKET( ).
Chapter 11 使用者資料包通訊協定.
2019/5/3 JAVA Socket(UDP).
指導教授:梁明章 A 許之青 國立高雄大學 2010/06/25
2019/5/20 JAVA Socket(UDP).
助教:廖啟盛 JAVA Socket(UDP) 助教:廖啟盛
Internet课程设计 教师:陈 妍 朱海萍 西安交通大学计算机系
第十二章 Java网络编程 1.URL编程 2.Socket网络编程 3.Datagram网络编程.
第7章 传输层协议——TCP与UDP 任课教师 卢豫开.
Department of Computer Information Science, NCTU
Presentation transcript:

Socket Programming

Socket Programming Open Source Implementation: Linux Socket Filter TCP/IP 簡介 TCP/IP模組架構 Socket介紹 Socket分類 Client/Server model(主從式架構模型) 相關函式 TCP Socket程式設計 UDP Socket程式設計 Socket Read/Write Inside Out Performance Matters: Interrupt and Memory Copy at Socket Open Source Implementation: Linux Socket Filter

TCP/IP 簡介 TCP/IP 的全稱是Transmission Control Protocol / Internet Protocol (TCP/IP) 當初是用來配合ARPANET 來處理不同硬體之間的連接問 題的。 ARPANET除了研發出一套可靠的資料通訊技術外,還同 時要兼顧跨平臺作業,從而奠定了今日的網際網路模式。

TCP/IP模組架構 一個TCP/IP模組架構包含4個階層,分為網路存取層、 網際網路層、傳輸層和應用層 階層 說明 網路存取層 提供一個與實體網路之間的介面 網際網路層 提供與硬體無關的邏輯位置,並將封包(Packet)發送至網路上,並讓他們圖利的到達目的地。 傳輸層 為網際網路提共流程控制、錯誤檢查、回報服務,式與網路應用程式間的介面。 應用層 為網路除錯、檔案傳輸、遠端控制和網際網路活動提供應用程式。

Socket 介紹 socket 是一種可做雙向資料傳輸的通道, Linux程序可經由此裝置與本地端或是遠端的 程序做溝通。

Socket分類 (1)Datagram sockets(connectionless) 資料在datagram sockets間是利用UDP封包傳送,因此 接收端socket可能會收到次序錯誤的資料,且其中部分資料 亦可能會遺失。 (2)Stream sockets(connection-oriented) 資料在stream sockets間是利用TCP封包來傳送,因此 接收端socket可以收到順序無誤、無重覆、正確的資料。此 外TCP傳送時是採資料流的方式,因在傳送時會所有資料會 視情況被分割在數個TCP封包中。

Client/Server model 每個網路應用程式都有一個通訊端點,一種端點是 用戶端,另一種是伺服器。根據定義,用戶端會先送出 第一個封包,由一個伺服器接收。在初步接觸後,用戶 端和伺服器均能開始收送資料。 依據socket所提供的服務來將它分類,然而在用戶 端和伺服器上的這兩個sockets必須是同一類才能互相通 訊,也就是說,他們必須都是stream(TCP)或都是 datagram(UDP)。

相關函式socket() NAME socket() - create an endpoint for communication SYNOPSIS #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); 1. 由server和client使用 2. domain: 設AF_INET 3. type: SOCK_STREAM或SOCK_DGRAM 4. protocol: 0 (讓socket()根據type自動設定)。 5. 成功傳回socket descriptor,失敗傳回-1 (並使用errno的macro)

相關函式bind() NAME bind() - bind a name to a socket SYNOPSIS #include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, struct sockaddr *my_addr, int addrlen); 1. 由server使用 2. sockfd為socket()的回傳值。 3. myaddr 須指定port和ip後傳入,注意是用struct sockaddr_in宣告 ,傳入時轉為struct sockaddr。 4. addrlen直接用 sizeof(struct sockaddr) 5. bind就是將local的endpoint attach到一個socket

相關函式connect() NAME connect() - initiate a connection on a socket. SYNOPSIS #include <sys/types.h> #include <sys/socket.h> int connect(int sockfd, struct sockaddr *serv_addr, int addrlen); 1. connect()由client呼叫 2. sockfd由socket()產生,serv_addr指定server的ip和port後傳入 3. addrlen直接用 sizeof(struct sockaddr)

相關函式listen() NAME listen() - listen for connections on a socket SYNOPSIS #include <sys/socket.h> int listen(int sockfd, int backlog); 1. 由server使用 2. sockfd由socket()產生,backlog設定可queue住的connection數量 (等待accept())。 3. 失敗傳回-1

相關函式accept() NAME accept() - accept a connection on a socket SYNOPSIS #include <sys/types.h> #include <sys/socket.h> int accept(int sockfd, struct sockaddr *addr, int *addrlen); 1. sockfd: listen()所使用的那個sockfd 2. addr 宣告完就拿來用,將存放client的資訊 3. addrlen直接用 sizeof(struct sockaddr) 4. 失敗傳回-1 5. server listen()完後開始等待accept()。 accept()傳回一個file descriptor以供此connection的I/O之用。 accpet完之後,server繼續使用listen()的fd等待下一個connection。

相關函式sendto() int sendto(int sockfd, const void *msg , int len, int flags); 1. sockfd可以是listen()的fd或是accpet的fd。 2. msg就是data,len就是data 的length (sizeof(msg)) ,flag就設0。 3. 回傳值為送出去的大小 4. 失敗傳回-1

相關函式recvfrom() The recvfrom() call is similar in many respects: int recvfrom(int sockfd, void *buf , int len, unsigned int flags); 1. sockfd: 要從哪個fd接收。 2. 回傳值為收到的大小。若回傳0,表示對方把connection切了。

相關函式write() write() NAME write() - write to a file descriptor SYNOPSIS #include <unistd.h> ssize_t write(int fd, const void *buf, size_t count); 1. 可寫到file,device或socket

相關函式read() read() NAME read() - read from a file descriptor SYNOPSIS #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); 1. 從file,device或socket讀取 2. 沒有data則read會block 3. count指定要讀的長度,如果沒有那麼多,則return,不會block

相關函式close() close() NAME read() - read from a file descriptor SYNOPSIS #include <unistd.h> int clode(int sockfd); 1.呼叫close() 若成功:傳回0 失敗:傳回-1

TCP Socket程式設計

UDP Socket程式設計

所有的網路應用程式皆可分為五個步驟: 開啟一個socket 為socket命名 與另一個socket結合 在sockets間收送資料 關閉socket

Socket Read/Write Inside out User Space Server Client Server socket creation send data Client socket creation socket() bind() listen() write() accept() read() connect() sys_listen inet_listen sys_write do_sock_write sock_ sendmsg inet_ sendmsg tcp_ sendmsg tcp_ write_xmit sys_socket sock_create inet_create sys_bind inet_bind sys_accept inet_accept tcp_accept wait_for_ connection Kernel Space sys_read do_sock_read sock_ recvmsg sock_common_ recvmsg tcp_ recvmsg memcpy_ toiovec sys_connect inet_stream _connect tcp_v4_ getport tcp_v4_ connect inet_wait _connect sys_socketcall Internet

Socket Read/Write Inside out

Performance Matters: Interrupt and Memory Copy at Socket Latency in receiving TCP segments in the TCP layer Latency in transmitting TCP segments in the TCP layer

Open Source Implementation: Linux Socket Filter Linux Socket Filter (net/core/filter.c) Similar to BPF (Berkley Packet FIilter) network monitor rarpd filter buffer BPF protocol stack user kernel link-level driver network