100 likes | 182 Views
Review: What functionality is supported by IP? What IP does not do? How many classes of IP addresses? Explain fields in an IP header? How subnet works? How classless Inter-domain routing work? What does an IP router do? What/why “longest matching”. Chapter 6: The Transport layer.
E N D
Review: • What functionality is supported by IP? • What IP does not do? • How many classes of IP addresses? • Explain fields in an IP header? • How subnet works? • How classless Inter-domain routing work? • What does an IP router do? • What/why “longest matching”
Chapter 6: The Transport layer. • Very similar to the data link layer. • two hosts connected by a link or two hosts connected by a network • differences: • When two hosts are connected by a link, packets will not reorder or duplicate (if the sender sends only once). In addition, packets will either get to the receiver or get lost. • When two hosts are connected by a network, packets can be duplicated, delayed, lost, reordered. • Implication: The problems to be addressed in the transport layer are very similar to those in the data link layer. However, the solutions may be more complex.
The transport layer issues: service interface, addressing, connection management, error control, flow control, multiplexing/demultiplexing, quality of service • Service interface • connection-oriented and connectionless. • similar to the network layer. Why one more layer? • network layer -- part of the communication subnet, run by carrier. can't be changed. • transport layer -- put one more layer on the hosts to get the services needed • potential problem: may do the same thing two times, which can decrease the communication performance.
Addressing • Link: want to transfer data to Ethernet card 08.00.2b.2a.83.62 • Network: want to transfer data to IP host 128.2.222.85 • Transport: which entity you will try to address? • want to talk to one process on host 128.2.222.85. • what to do use? process ID? how many bits? What would be the problem when using the pid as transport layer identifier? • Abstraction: port number • Multiplexing/Demultiplexing • upward multiplexing: multiplex different transport connections onto the same network connection. • downward multiplexing: open multiple network connections for a single transport layer connection.
Error Control. • sliding window protocol • Flow Control • buffer size may need to be adjusted for from time to time (variable size window) • two ways to inform the sender: • window-based: receiver tells sender a window-size • rate-based: receiver tells sender a rate. • Connection Management • How to tell the start and the end of a logical connection? • Can be quite tricky: consider this bank transaction example • (a) setup connection • (b) transfer $100 • (c) close connection • all messages are delayed and replayed.
Solution 1: • assign a connection-id to each connection, the receiver keeps track what connections have been terminated. • How many connection-ids to keep? • What if receiver crashs and comes back again? It forgets what connections have been established? • Solution 2: • Assuming that if a packet dies at t, and the effect will die at t+T. • Use different initial sequence numbers (ISN) for each connection. • Need to make sure that the sequence number has not been used in the previous session (or the packet with that sequence number has died).
How to choose Initial Sequence number. • A clock runs continuously, use the lower k-bit as the ISN. • Host A port 10 talk to host B port 12, 8 bits sequence number, increments every 1 sec. Consider this situation: • A starts at time 100, choose ISN 100, sends 150 packets crashed. • A reboots at time 200 and, use local port 10 and connect to host B port 12, choose ISN 200 • Packets 200 - 250 from previous connection may be replayed • How to make sure that the sequence numbers do not overlap? • forbidden zone. • don't generate sequence numbers faster than the clock of ISN. • can also come from beneath • wait for 2*MSL after crash before setting new connections
Connection termination: • sender “disconnect”, waiting for receiver’s disconnection • receiver “disconnect”, waiting for sender’s acknowledge • after getting receiver’s “disconnect” packet, sender “acks”. • Problem? • the three army problem.
Service primitives for TCP: • socket: create a new communication end point #include <sys/socket.h> int socket(int domain, int type, int protocol); domain: AF_UNIX file system AF_INET internet address type: SOCK_STREAM reliable connect-oriented, byte stream SOCK_DGRAM unreliable connectionless SOCK_SEQPACKET record stream protocol: 0, non-zero for a specific protocol • bind: attach an address to a socket int bind(int socket, const struct sockaddr *address, size_t address_len) address: contains the port number, address.sin_port
Service primitives for TCP: • listen: announce willingness to accept connections int listen(int socket, int backlog); backlog: number of outstanding connections in the listen queue • accpet: accept a new connection on a socket int accept (int socket, struct sockaddr *address, size_t *address_len); address: the address of the connecting socket • connect: try to establish a connection int connect(int socket, const struct sockaddr *address, size_t address_len); address: the destination address • write: send data ssize_t write(int fildes, const void *buf, size_t nbyte); • read: receive data ssize_t read(int fildes, void *buf, size_t nbyte); • close: close a connection int close(int fildes);