sip over tcp or udp
来源:互联网 发布:宿舍网络搭建 编辑:程序博客网 时间:2024/06/07 23:02
1 with TCP
Sender: SIP message is not limited in its size. When user calls system call to send SIP message, this message can be divided into more than 1 TCP segment depending on window size of receiver. Each TCP segment then can be fragmented to more than one IP packets by IP layer. This fragmentation is necessary for sending data through link layer with a particular MTU.
For eg, i want to send 4kB SIP message, so i call send() with input is buffer of this message. The message will be splitted to 2 TCP segments depend on window size at receiver: segment 1 with size of 2,1kB and segment 2 with size of 1,9kB. Then say i use Ethernet interface with MTU is 1500 bytes, so segment 1 is divided into 2 fragments: fragment 1 has size of 1kB, fragment 2 has size of 1,1kB. The same step with segment 2, it will be divided into 2 fragments: one with 1kB and one with 0,9kB. Totally we have 4 IP packets sent through Ethernet interface.- Receiver: IP layer is in charge of reassemblying IP packets to reproduce the TCP segment. So IP layer returns to transport layer (here is TCP) TCP segments correspond to TCP segments sent from sender.
Kernel then saves that data to kernel's buffer and notify to user by returning recv() or read(). Because a SIP message may be sent used more than 1 segments, receiver may be need to call more than 1 read() to receive all message. So receiver need to check data each time read() return to know the end of message is reached or not.
Return to former example, receiver's IP layer reassembles 2 first packets to reproduce first TCP segment,
then save its data to kernel's buffer. read() then returns to user that data. So user need to check whether he receives all message content or not. If not, he continues calling to read(), wait for second TCP segment come and then check it.
2. With UDP
UDP is datagram protocol, so each time sender call send() or write() with input is buffer to SIP message,
all that SIP message will be contained in UDP datagram before can be fragmented at IP layer. At receiver side, it just calls recv() or read() one time to receive all message. It means that the number of calls to send() at
sender is the same with the number of calls to recv() at receiver.
But unlike TCP, UDP has a limitation in size of data it can transport. So we just can send SIP message with
maximum size of 64kB. And another problem with UDP is if UDP datagram is fragmented by IP layer and any one of these packets lost, receiver has no way to receive all message. So with UDP it is recommended to send SIP message with size lower or equal to (MTU - UDP header - IP header).
from 点击打开链接
0 0
- sip over tcp or udp
- TCP、UDP over IP
- Good Udx TCP-OVER-UDP实时数据传输协议
- 通讯协议的选择,TCP or UDP
- 通讯协议的选择,TCP or UDP
- 通讯协议的选择,TCP or UDP
- 通讯协议的选择,TCP or UDP
- (TCP-over-UDP library):基于UDP协议之上实现通用、可靠、高效的TCP协议
- (TCP-over-UDP library):基于UDP协议之上实现通用、可靠、高效的TCP协议
- (TCP-over-UDP library):基于UDP协议之上实现通用、可靠、高效的TCP协议
- (TCP-over-UDP library)基于UDP协议之上实现通用、可靠、高效的TCP协议
- (TCP-over-UDP library):基于UDP协议之上实现通用、可靠、高效的TCP协议
- TDP(TCP-over-UDP library):基于UDP协议之上实现
- qq主要用的是哪个协议?tcp or udp?
- Virtual Connection over UDP
- RTP Over RTSP Over TCP
- TCP&UDP
- TCP UDP
- 冒泡算法
- Android利用ContentResolver查询的三种方式
- Linux设备驱动之HID驱动
- 恢复百度云盘本地误删的文件脚本---python
- 解决Camera.parameter.setPreviewSize/Camera.parameter.setPictureSize适应不同手机问题
- sip over tcp or udp
- 怎么让背景图不随页面滚动
- 关于数据库的链接查询
- 无线网络安全攻防
- 约瑟夫环问题
- 数据库JDBC驱动及URL介绍
- scp
- CountDownLatch用法
- Java NIO 反应器(Reactor)模式