网络编程1

Posted zhenghuiwen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络编程1相关的知识,希望对你有一定的参考价值。

传输层

传输层的由来:网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,然后大家使用的都是应用程序,你的电脑上可能同时开启qq,暴风影音,等多个应用程序,

传输层功能:建立端口到端口的通信

 

tcp三次握手和四次挥手

技术图片

应用层

应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式 

应用层功能:规定应用程序的数据格式。

 

 技术图片

socket

什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

技术图片

总结:

服务端具备:

  1,稳定的运行并对外一直提供服务

  2,绑定固定的地址(ip+port)

    IP: 用于定位子网掩码

    ARP:将IP转为Mac地址

      Mac:用于定位子网掩码的位置

    port:端口用于定位计算机上基于网络通信的软件

互联网:

  1,物理键接介质

  2,互联网协议(计算机界的英语)

OSI 七层协议:

  掌握五层即可:

    • 应用层:软件,浏览器
    • 传输层:TCP,UDP
    • 网络层:ipv4
    • 数据链接层:把电信号进行分组,分组是以以太网协议进行分组的
    • 物理层:发送电信号      

 

socket :网络传输数据需要用到套字节,socket相当于用户层的桥梁。

技术图片

 

TCP:

  三层握手建立链接(完成三次握手后,客户端与服务端开始传输数据)

    所谓三次握手就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发:

      (1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
      (2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
      (3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

技术图片

三次握手过程说明: 
  1、由客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值)
  2、由服务端回复客户端发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接。

  3、客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)

  

  四次挥手断开链接:

    技术图片

 

 

四次挥手过程说明: 

  1、客户端发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中的FIN字段置为1,表示需要断开TCP连接。(FIN=1,seq=x,x由客户端随机生成)

  2、服务端会回复客户端发送的TCP断开请求报文,其包含seq序列号,是由回复端随机生成的,而且会产生ACK字段,ACK字段数值是在客户端发过来的seq序列号基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP断开请求已经得到验证。(FIN=1,ACK=x+1,seq=y,y由服务端随机生成)
  3、服务端在回复完客户端的TCP断开请求后,不会马上进行TCP连接的断开,服务端会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕,就会将回复报文的FIN字段置1,并且产生随机seq序列号。(FIN=1,ACK=x+1,seq=z,z由服务端随机生成)
  4、客户端收到服务端的TCP断开请求后,会回复服务端的断开请求,包含随机生成的seq字段和ACK字段,ACK字段会在服务端的TCP断开请求的seq基础上加1,从而完成服务端请求的验证回复。(FIN=1,ACK=z+1,seq=h,h为客户端随机生成) 

至此TCP断开的4次挥手过程完毕

 

半链接池:半链接池限制同一时间内的请求数,半链接池占用的是内存空间,池的大小不能无限大。

UDP 与 TCP 区别:

  UDP :

    优点:UDP在传输数据前不建立连接,数据的传输速度快

    缺点:UDP没有相关安全传输机制

UDP数据传输不能超过512字节,否则会丢包。

  TCP:

    优点:TCP协议是可靠协议是因为它存在三次握手以及四次挥手的安全传输机制,保证数据能够安全、完整的进行传输

    缺点:数据的传输速度慢

三层握手建立链接

技术图片

四次挥手断开链接

技术图片

 

以上是关于网络编程1的主要内容,如果未能解决你的问题,请参考以下文章

Linux/UNIX网络编程的目录

(46)LINUX应用编程和网络编程之一Linux应用编程框架

javaAPI_网络编程基础_网络编程基础1

java之网络编程1-Tcp

网络编程入门--01入门

编程基础如何自学计算机/编程 | 从零开始的代码之路