[关闭]
@skyway 2015-04-22T06:03:36.000000Z 字数 3908 阅读 1030

TCP和UDP

网络

TCP/IP协议是一个协议簇,里面包括很多协议,TCP/IP只是其中很重要的两个协议,因此用其命名。可分为四个层次:网络接口层、网络层、传输层和应用层。网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议,传输层中有TCP协议与UDP协议,应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。


HTTP协议

HTTP全称是HyperText Transfer Protocal,超文本传输协议,从1990年开始就在WWW上广泛应用,是现今在WWW上应用最多的协议,Http是应用层协议,当你上网浏览网页的时候,浏览器和Web服务器之间就会通过HTTP在Internet上进行数据的发送和接收。Http是一个基于请求/响应模式的、无状态的协议。即我们通常所说的Request/Response。

Socket

为了实现以上的通信过程而建立成来的通信管道,其真实的代表是客户端和服务器端的一个通信进程,双方进程通过socket进行通信,而通信的规则采用指定的协议。socket只是一种连接模式,不是协议,tcp、udp,简单的说(虽然不准确)是两个最基本的协议,很多其它协议都是基于这两个协议如,http就是基于tcp的,用socket可以创建tcp连接,也可以创建udp连接,这意味着,用socket可以创建任何协议的连接,因为其它协议都是基于此的。

URL

URL(Uniform Resource Locator) 地址用于描述一个网络上的资源, 基本格式如下

  1. schema://host[:port#]/path/…/[?query-string][#anchor]
  2. scheme 指定低层使用的协议(例如:http, https, ftp)
  3. host HTTP服务器的IP地址或者域名
  4. port# HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如http://www.cnblogs.com:8080/
  5. path 访问资源的路径
  6. query-string 发送给http服务器的数据
  7. anchor

GET和POST

Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET,POST,PUT,DELETE.一个URL地址用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。

GET和POST的区别

TCP协议

Transmission Control Protocol,传输控制协议

TCP完整过程

建立连接(三次握手)

三次握手

断开连接(四次握手)

原因:Server收到FIN时数据不一定发送完成,未必马上关闭socket,Server发送FIN时表示同意关闭,收到Client确认信息后关闭连接。

四次握手

窗口和滑动窗口

TCP使用窗口机制进行流量控制,连接建立时,各端分配一块缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端,接收方发送的确认信息中包含了自己剩余的缓冲区尺寸,剩余缓冲区空间的数量叫做窗口。

TCP流量控制

滑动窗口过程


UDP协议

User Data Protocol,用户数据报协议

UDP适用范围

TCP/UDP应用

应用场景


TCP和UDP区别


TCP粘包

TCP无边界,造成对采用TCP协议发送的数据进行接收比较麻烦,在接收的时候易出现粘包,即发送方发送的若干包数据到接收方接收时粘成一包。由于TCP是流协议,对于一个socket的包,如发送10AAAAABBBBB两次,由于网络原因第一次又分成两次发送,10AAAAAB和BBBB,如果接包的时候先读取10(包长度)再读入后续数据,当接收得快,发送的慢时,就会出现先接收了10AAAAAB,会解释错误,再接到BBBB10AAAAABBBBB。

解决办法


TCP和UDP实现过程

流程图

摘抄自:
http://www.cnblogs.com/cy568searchx/p/3711670.html
http://blog.csdn.net/whuslei/article/details/6667471
http://www.cnblogs.com/bizhu/archive/2012/05/12/2497493.html
http://staff.ustc.edu.cn/~mengning/np/linux_socket/new_page_14.htm
http://blog.csdn.net/ce123_zhouwei/article/details/8976006

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注