1. 인터넷 통신
- 다양한 인터넷노드를 통해 클라이언트는 서버로, 서버는 클라이언트로 요청 또는 응답을 보냄
2. IP(Internet Protocol)
[ 역할 ]
- 지정한 IP 주소(IP Address)에 데이터 전달
- 패킷(Packet)이라는 통신 단위로 데이터 전달
- 클라이언트가 IP패킷에 출발지IP, 목적지IP, 기타 + 전송 데이터를 넣고 서버로 전달
- 서버가 패킷에 출발지IP, 목적지IP, 결과 데이터들을 넣고 클라이언트로 전달
[ IP 프로토콜의 한계 ]
- 비연결성
- 패킷을 받을 대상이 없거나, 서비스 불능상태여도 패킷 전송됨
- 그치만, 그 결과를 알수는 없음
- 비신뢰성
- 클라이언트에서 서버로 가거나, 서버에서 클라이언트로 갈 때 패킷 소실 가능
- 패킷 전달 순서 문제 발생
- 패키지 용량이 크면(1500바이트 넘으면) 끊어서 보냄 -> 서로 다른 노드 탈 수 있음
- 내가 던질 때랑 친구가 던질 때랑 경로가 다를 수 있음
- 프로그램 구분
- 같은 IP를 사용하는 서버에서 통신하는 어플리케이션이 2개 이상인 경우
3. TCP, UDP
[ 인터넷 프로토콜 스택의 4계층 ]
- 애플리케이션 계층 - HTTP, FTP
- 전송 계층 - TCP(IP위에 얹혀서 조금 보완해주는 것), UDP
- 인터넷 계층 - IP
- 네트워크 인터페이스 계층
[ 프로토콜 ]
[ IP 패킷과 TCP/IP 패킷의 차이 ]
- IP 패킷: 출발지 IP, 목적지 IP, 기타 + 전송데이터
- TCP/IP 패킷: IP 패킷 + 출발지 PORT, 목적지 PORT 전송 제어, 순서, 검증 정보(TCP 세그먼트) + 전송데이터
[ TCP 특징 ]
- 연결지향 - TCP 3 way handshake (가상 연결)
- 클라이언트, 서버 모두 SYN, ACK를 보냄 -> 클라이언트도 서버를 믿을 수 있고, 서버도 클라이언트 믿을 수 있음
- 만약에 서버가 껴져있었는데 클라이언트가 접속하려면 SYN메세지 보냈을 때 서버에서 응답이없으니까 연결안됨 -> 서버에서 응답이 없으므로 클라이언트가 hello world 메세지 안보냄!
- 데이터 전달 보증
- 순서 보장
- A,B,C 순서로 클라이언트가 보냈는데, 서버가 A,C,B순서로 도착했으면 C보다 B먼저 보내라고 클라이언트한테 요청
- 신뢰할 수 있는 프로토콜
- 현재는 대부분 TCP 사용
[ UDP 특징 ]
- 기능이 거의 없음(하얀 도화지에 비유)
- 연결지향 - TCP 3 way handshake X
- 데이터 전달 보증 X
- 순서 보장 X
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
- IP와 거의 동일 +PORT에 체크섬(체크메세지) 정도만 추가
- PORT: 하나의 ip에서 여러 애플리케이션 접속할 때 해당 패킷을 알려줌
- 애플리케이션에서 추가 작업 필요
[ TCP와 UDP 정리 ]
- 복잡한 인터넷 망애ㅔ서 메세지보내려면 IP필요하지만, 이것만 가지고는 데이터가 잘 보내졌는지 신뢰하기 어렵고, port라는 개념도없고, 순서가 꼬일 수도 있음 -> TCP가 해결
- TCP의 단점: 데이터 양도 크고 전송속도 느림,,ㅠ -> 최적화 불가능
- UDP는 IP와 똑같은데 포트가 추가된 백지상태
필요하면 UDP프로토컬위에 어플리케이션에서 확장가능
4. PORT
- 같은 IP 내에서 프로세스 구분
- 클라이언트가 200.200.200.3:80으로 요청보냄
서버가 응답할 때 100.100.100.1:10010으로 응답함 ->요청보낼 때 TCP/IP패킷에서 출발지ip랑 port 보내기 때문
5. DNS
- IP는 기억하기 어렵고, 변경될 수 있음
- DNS = 도메인 네임 시스템 -> 도메인 명을 등록해 IP주소처럼 사용