网络基础知识及tcp udp的区别和连接过程

  网络 将俩台主机连接起来

  互联网 将各个网络连接起来 (路由器) 最大的互联网 Inter

  互联网中通讯的主角: 运行在不同主机上的俩个进程

  如何在网络标识进程: IP地址 + 端口号

  IP地址:标识网络中主机的地址

  端口号:标示主机上的进程的PID

 

网络设备:

  交换机

  路由器(选路 存储 转发)

路由表 IP地址指定的网络对应的接口

网线:  双绞线    同轴电缆  光纤   (光传输 ) 

  七层协议模型 应用层   表示层  会话层  传输层  网络层  数据链路层  物理层

 

 Tcp/ip 四层协议模型

应用层       HTTP HTTPS   DNS   FTP   PING

传输层       TCP  UDP

网络层         IP     ICMP

数据链路层    ARP  RARP  

物理层

 

TCP:面向连接的,可靠的,字节流服务。

 

Tcp 报头中的控制信息  保证 tcp可靠性传输

 

Tcp的面向连接

 

  1. 俩端通讯之前,必须先建立连接
  2. 连接一旦建立,俩端交互过程都在这一连接上完成,无需重新建立连接,直到关闭连接为止
  3. 通讯完成后,需要断开连接,释放服务器的资源
  4. 操作系统为我们维护连接,所以内核需要为连接分配相应的资源
  5. 对于服务器而言,一个连接只能为一个客户端维护,从而造成服务器性能有待优化。

拥塞控制:

  1. 慢启动
  2. 拥塞避免
  3. 快重传
  4. 快恢复

快重传: 发送方连续收到三个相同的确认报文段,此刻,网络拥塞

  1. 将丢失的报文段立即重传,无需等待超时时间到达
  2. 将慢启动门限设置为原来的一半,重新开始慢启动

快速恢复: 发送方连续收到三个相同的确认报文段,此刻,网络拥塞

      1.将丢失的报文段立即重传,无需等待超时时间到达 

      2 .将慢启动门限设置为原来的一半,重新开始拥塞避免。


 
 
TCP 服务器编程流程


Int listenfd =socket();              //将ipv4协议和tcp协议绑定,给外部提供连接,=通道 门迎
Bind();                                     //将服务器的IP地址+端口号与listenfd 绑定
listen(listenfd ,size);                //内核启动监听,接受客户端监听  不会阻塞
Int c =accept();                       // 获取一个连接完成的客户端,具体与服务器连接上的客户端。
服务于C:
 recv();                                  //接受数据
 send();                                 //发送数据
 close(c);                               //断开连接
Close(listenfd);
 
TCP 客户端编程流程


Bind()                                           //可选 如果没有绑定 内核也会自动选择有个可用端口,自动探测本地的IP地址
Int sockfd= socket();
connect();                                    //有阻塞的,但是三次握手的速度快,感受不到
send();
recv()
close() 
 
 
  Tcp建立连接过程  三次握手:
 
 
                                                      
 
Tcp断开连接过程->四次挥手
 
 
 
UDP:无连接的,不可靠的,数据报服务。

udp编程流程


服务器:被动通讯方
 
Int sockfd= socket();
bind();                                             //将服务器的IP地址、端口号与sockfd、绑定
recvfrom();                                      // 必须接受对端地址信息
sento ();
 
close(sockfd)                                  //关闭服务器
 
客户端:主动通讯方
 

Int sockfd= socket();

bind();                                 //将服务器的IP地址、端口号与sockfd、绑定

sendto ();

recvfrom();                            //可以不接受对端信息

 close(sockfd)                      //关闭客户端

Int recvfrom(int sockfd,void *buff,int len,int flags , struct  )

Tcp/udp:

 

字节流服务:

  1. 发送方send的次数和接收方recv的次数没有必然联系
  2. 如果发送方发送一次数据,接收方一次未接受完,不会丢失

数据报服务:

  1. sendto服务的次数和recvfrom次数相等
  2. 如果recvfrom一次未接受完,剩余的数据会丢弃
     
    传送数据的可靠性
  3. 数据能否到达对端    32位确认号,超时重传,滑动窗口(流量管控),拥塞控制
  4. 数据到达对端是否有序  32位序号   不乱序
  5. 数据是否被修改(失真) 16位冗余检验   CRC算法完成校验
     

猜你喜欢

转载自blog.csdn.net/xxy_08/article/details/88550088