网络编程

来源:互联网 发布:mac快捷键的图形符号 编辑:程序博客网 时间:2024/06/05 13:29
一.Linux TCP/IP分层
应用层:应用层,表示层,会话层
传输层:传输层
网际层:网络层
网络接口:数据链路层,物理层
二.TCP/IP 协议组分类
1.Internet 协议(IP)
2.传输控制协议(TCP)和用户数据报协议(UDP)
3.处于 TCP 和 UDP 之上的一组应用协议。它们包括:TELNET,文件传送协议(FTP),域名服务(DNS)和简单的邮件传送程序(SMTP)等
三.TCP与UDP区别
1.TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
2.TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
3.TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的。
  UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)。
4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
5.TCP首部开销20字节;UDP的首部开销小,只有8个字节。
6.TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。
四.套接字类型
1.流式套接字(SOCK_STREAM)
流式的套接字可以提供可靠的、面向连接的通讯流,它使用了TCP协议,TCP保证了数据传输的正确性和顺序性。
2.数据报套接字(SOCK_DGRAM)
数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错,它使用数据报协议UDP。
3.原始套接字
原始套接字允许对低层协议如IP或ICMP直接访问,主要用于新的网络协议的测试等。
五.地址结构
 struct sockaddr
{
   u_short sa_family;
   char sa_data[14];
 };
 Sa_family:地址族,采用“AF_xxx”的形式,如:AF_INET  
 Sa_data:14字节的特定协议地址
struct sockaddr_in
    {
       short int sin_family;  /* Internet地址族 */
       unsigned short int sin_port;  /* 端口号 */
       struct in_addr sin_addr;   /* IP地址 */
       unsigned char sin_zero[8];  /* 填0 */
     };
编程中一般并不直接针对sockaddr数据结构操作,而是使用与sockaddr等价的sockaddr_in数据结构
struct in_addr
{
 unsigned long s_addr;
 };
  S_addr: 32位的地址
六.进行Socket编程的常用函数
socket:创建一个socket
bind:用于绑定IP地址和端口号到socket
connect:该函数用于绑定之后的client端与服务器建立连接
listen:设置能处理的最大连接要求,Listen()并未开始接收连线,只是设置socket为listen模式。
accept:用来接受socket连接。
send:发送数据
recv:接收数据
原创粉丝点击