美文网首页
网络编程基础

网络编程基础

作者: 小芳姑娘2012 | 来源:发表于2018-05-31 11:41 被阅读10次

    网络七层协议

    • 应用层: 用户接口,应用层序,网关,HTTP协议等
    • 表示层:数据表示,相当于一个东西的表示,比如图片,声音,视频
    • 会话层:会话的建立和结束,RPC,SQL,NFS,ASP
    • 传输层:端到端的控制,TCP,UDP,SPX
    • 网络层:路由熏制Network,路由器, IP、IPX、APPLETALK、ICMP
    • 数据链路层:保证无差错链路的data link 交换机,网桥,802.2、802.3ATM、HDLC、FRAME RELAY;
    • 物理层:传输比特流 集线器 中继器 V.35、EIA/TIA-232.

    HTTP协议

    HyperTextTransferProtocol(超文本传输协议)是用于从万维网服务器传送超文本到本地浏览器的传输协议,HTTP 是一个应用层协议,由请求和相应构成,是一个标准的客户端服务器模型。

    C/S模式

    Client 和 Server 常常分别处在相距很远的两台计算机上,Client 程序的任务是将用户的要求提交给 Server 程序,再将 Server 程序返回的结果以特定形式显示给用户;Server 程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序

    网络通信过程

    • 假设本机IP是192.168.0.1访问www.baidu.com首先需要把域名解析为IP地址,需要使用DNS协议,像DNS服务器查询IP地址。
    • 知道了IP地址开始向服务器请求数据,访问服务器使用http协议,在传输层使用TCP协议,TCP协议通过三次握手连接服务器。
    • 三次握手

    第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN+RECV状态;
    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次状态。


    image.png

    常见的问题

    TCP和UDP的区别

    • TCP是面向连接的,建立连接需要经历三次握手,保证数据正确性和数据顺序
    • UDP是非连接的协议,传送数据受生成速度,传输带宽等限制,可能造成丢包
    • UDP一台服务端可以同时向多个客户端传输信息
    • TCP报头体积更大,对系统资源要求更多

    socket连接和http连接的区别

    简单说,你浏览的网页(网址以http://开头)都是http协议传输到你的浏览器的, 而http是基于socket之上的。socket是一套完成tcp,udp协议的接口。
    HTTP协议:简单对象访问协议,对应于应用层 ,HTTP协议是基于TCP连接的
    tcp协议: 对应于传输层
    ip协议: 对应于网络层
    TCP/IP是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。
    Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
    http连接:http连接就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉;
    socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。所以当一个socket连接中没有数据的传输,那么为了维持连接需要发送心跳消息~~具体心跳消息格式是开发者自己定义的
    我们已经知道网络中的进程是通过socket来通信的,那什么是socket呢?socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭),这些函数我们在后面进行介绍。

    相关文章

      网友评论

          本文标题:网络编程基础

          本文链接:https://www.haomeiwen.com/subject/vcnubxtx.html