전송 계층
목적지에 신뢰할 수 있는 데이터를 전달하기 위해 존재
물리, 데이터 링크, 네트워크 계층만으로는 목적지에 데이터를 보낼 수는 있으나, 중간에 데이터가 손상되거나 유실되더라도 아무것도 해줄 수 없음
전송 계층의 2가지 기능
오류가 발생하면 데이터를 재전송하도록 요청하는 기능
전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능
전송 계층의 특징
신뢰성/정확성
데이터를 목적지에 문제없이 전달하는 것
연결형 통신 방식을 통해 통신
효율성
데이터를 빠르고 효율적으로 전달하는 것
비연결형 통신 방식을 통해 통신
연결형 통신
수신 측과 송신 측이 여러번 서로의 송수신 상태를 확인하며 통신하는 방식
속도보다 신뢰성, 정확성이 중요할 때 사용
통신 프로토콜로 TCP 를 사용함
비연결형 통신
상대방과의 확인 절차 없이 일방적으로 통신
동영상 전송에 많이 사용
통신 프로토콜로 UDP 를 사용함
TCP 헤더
전송 계층에서 TCP로 전송되는 데이터에 붙임
TCP 헤더가 붙은 데이터를 세그먼트라 함
TCP 헤더의 구성
TCP 통신 방식
데이터를 전송하기 전, 먼저 연결(connection)이라는 가상의 독점 통신로를 확보해야함
연결과 관련된 정보들이 위 사진의 7번 코드 비트에 기록됨
코드 비트는 107~112 번째 비트에 해당하며, 초기 상태는 0, 활성화되면 1이 됨
코드 비트의 6개 비트 중 SYN(연결 요청 비트), ACK(확인 응답 비트) 를 통해 연결을 확립함
3-way 핸드셰이크
TCP 를 통해 연결할 때, SYN, ACK 비트를 사용하여 연결을 확립하는 방법
연결 방식 (컴퓨터 A와 B가 연결)
A 에서 SYN 비트를 1로 활성화하고 패킷을 B로 전송함 (연결 확립 요청)
B 에서 A 에서 온 패킷을 확인하고, A의 연결을 허가한다는 응답을 하기 위해 ACK 를 1로 활성화함과 동시에 A 와의 연결을 허가받기 위해 SYN 을 1로 활성화 하여 패킷을 전송함 (연결 확립 응답 + 연결 확립 요청)
A에서 B에서 온 패킷을 확인하고, B의 연결 확립 요청에 허가한다는 응답을 위해 ACK 를 1로 활성화 하여 패킷을 전송함 (연결 확립 응답)
연결을 종료할 때에는 FIN, ACK 비트를 활용하여 연결을 해제함
연결 종료 방식
A 에서 B 로 FIN 을 1로 활성화하고 패킷을 전송 (연결 종료 요청)
B 에서 A 로 ACK 를 1로 활성화하고 패킷을 전송 (연결 종료 응답)
B 에서 A 로 FIN 을 1로 활성화하고 패킷을 전송 (연결 종료 요청)
A 에서 B 로 ACK 를 1로 활성화하고 패킷을 전송 (연결 종료 응답)
연결 이후 데이터 통신
실제 데이터를 보내고 받을 때는 TCP 헤더의 (3)일련번호와 (4)확인 응답 번호를 사용함
일련 번호는 송신 측에서 수신 측에 이 데이터가 몇 번째 데이터인지 알려주는 역할을 함
확인 응답 번호는 수신 측이 송신 측에 몇 번째 데이터를 수신했는지 알려주는 역할을 하며, 다음에 받을 특정 일련번호의 데이터를 요청할 때도 사용됨
수신 측에서 확인 응답 번호를 보내지 않을 경우, 데이터가 올바르게 전송되지 않은 것이므로 데이터를 재전송함 (재전송 제어)
이렇게 하나씩 보내고 확인하면 너무 느리지 않을까?
-> 매번 확인 응답을 기다리는 대신 세그먼트를 연속해서 보내고 난 뒤 확인 응답을 반환하여 효율을 높일 수 있음
여러 개를 한번에 보내면 수신 측에서 처리할 수 있을까?
-> 수신 측에서는 받은 세그먼트들을 일시적으로 보관할 수 있는 버퍼에 저장하고 사용함
버퍼가 넘칠 정도로 보내면 어떻게 되지?
-> 대량으로 데이터가 전송되면 오버플로가 발생하게 됨. 따라서 이를 방지하기 위해 TCP 헤더에 (8)윈도우 크기 값을 설정해야 함
상대방 버퍼 크기를 알아야 윈도우 크기를 설정하지 않나?
-> 3-way handshake 단계에서 SYN, ACK 를 송수신함과 동시에 서로의 윈도우 크기를 보내주어 사용할 수 있음
포트 번호
TCP 프로토콜의 역할 중 하나인 전송된 데이터가 목적지의 어떤 애플리케이션에 사용되는 지를 알려주기 위해 포트 번호가 사용됨
TCP 헤더에 (1)출발지 포트 번호와 (2)목적지 포트 번호를 붙여 전송
16비트로 0~65535 번을 이용할 수 있음
0~1023 번 포트는 주요 프로토콜이 사용하도록 예약되어 있음. 이를 잘 알려진 포트(well-known ports) 라고 함
1024번은 예약되어 있지만 사용하지 않는 포트이며, 1025번 이상은 랜덤 포트라 하며 클라이언트 측의 송신 포트로 사용됨
웹 브라우저로 접속 시 임의의 포트가 자동으로 할당되어 사용됨
UDP 헤더
UDP 프로토콜로 통신 시 전송 계층에서 UDP 헤더가 붙는다.
UDP 헤더가 붙은 데이터를 UDP 데이터그램
이라 한다.
UDP 헤더 구조
UDP 특징
확인 절차를 거치지 않아 빠르고 효율적인 데이터 전송이 가능하다.
랜에서는 UDP를 활용하여 브로드캐스트 통신을 할 수 있다. (TCP 는 모든 컴퓨터에게 3-way 핸드셰이크와 같은 절차를 거칠 수 없으므로 적합하지 않다.)