목록Infra/Network (7)
miinsun
TCP의 흐름제어 TCP연결이 성립되면 전송자와 수시자 모두 sendBuffer와 receiveBuffer를 가짐 보내는 입장에서 window-size만큼 데이터 전송 받는 입장에서 receive buffer보다 이상의 데이터가 들어오면 전부 폐기됨 받는 입장의 receive buffer를 고려해서 보내는 것이 관건 흐름제어를 할때 Receive Window 필드를 사용 보내는 입장에서 window-size를 알려줌 받는 입장에서 데이터를 받으면 receive buffer를 알려줌 receive buffer만큼 데이터를 전송하게 됨 흐름 제어란 수신자의 버퍼가 넘치지 않도록 데이터 전송을 조절하는 작업 버퍼의 크기 확인 할 때 Receive window 필드의 값만 채워서 보내고 나머지는 쓰레기 값을 보..
타임 아웃이란? * TCP는 타이머를 통해서 데이터 재전송 여부를 판단 * timeout이 되기 전에 feedback이 오면 다음 패킷을 보냄 * timeout이 되면 패킷이 유실된 것으로 판단하고 재전송 RTT(Round Trip Time, 왕복 시간) 세그먼트가 수신자에게 도착하고 feedback이 돌아오는 시간을 rtt라고 함 타이머 시간을 결정 짓는 요소 타이머 시간 판단시, 시간이 너무 짧으면 오버헤드가 발생 반대로 시간이 너무 길면, 유실 대응이 늦어짐 그렇다면 타이머 시간을 RTT만큼 설정하면 되지 않을까? 모든 패킷의 RTT는 다르기 때문에 다른 RTT를 적정 RTT로 맞춰줘야 할 필요가 있음 대표값으로 맞춰줘야함 → Estimated RTT(현재까지 측정해온 RTT의 합을 평균) TCP ..
TCP의 전반적인 특징 Point-to-Point : 한쌍의 프로세스 간의 데이터 통신 Reliable : 신뢰성있고 순서에 의거해 전송 pipelined: window 사이즈를 조절해서 tcp 혼잡 및 흐름 제어 full duplex data: 양방향 통신, 전이중데이터 conection-oriented: 연결 지향적, 제어 메세지 교환 flow controlled: 흐름제어, 발신자는 수신자가 정한 용량보다 더 많이 보내지 못함 TCP 헤더 구성 요소 포트 넘버(source port & dest port) : 출발지 포트와 도착지 포트가 있다 (포트 넘버는 0 ~ 65535) 시퀀스 넘버(sequence number) : 데이터의 중복을 확인할 때 사용하는 번호 ACK 넘버(acknowledgemen..
💬 요구 사항 Java socket 통신을 구현 java_server.java 와 java_client.java로 구성 📌 Server 코드 서버 소켓 생성 ServerSocket serverSocket = new ServerSocket(9000); 서버는 client 접속을 대기하다가 client가 접속하면 accept 해준다 Socket socket = serverSocket.accept(); 접속된 클라이언트의 주소를 출력 System.out.println("Connected by ( " + socket.getLocalAddress()+ ", "+ socket.getLocalPort()+ ") "); Client가 보낸 메세지 출력 버퍼를 사용하면 입출력의 효율이 높아진다 상대방이 보낸 버퍼를 읽으..
- 개요 TCP와 UDP는 인터넷 상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용되는 프로토콜이다 TCP(Transmission Control Protocol)는 연결형 서비스로 UDP에 비해 높은 신뢰성을 보장하며, 데이터의 흐름이 연속적이다. TCP는 데이터의 흐름제어나 혼잡제어와 같은 기능도 하기 때문에 UDP보다 속도가 느리다는 단점이 있다. TCP서버는 클라이언트와 1대 1로 연결되며, 스트림 전송으로 전송 데이터의 크기에 제한이 없다. 또, 패킷에 대한 응답을 해야하기 때문에 성능이 좋지 않다. UDP(User Datagram Protocol)는 TCP와 달리 비연결형 프로토콜이다. 즉, 연결을 위해 할당되는 할당되는 경로가 없어, 각각의 패킷은 제각각의 경로로 수신된다. U..
소켓은 connect가 완료되면, 응답을 읽은 다음 해당 소켓은 파괴된다. 클라이언트 소켓은 일반적으로 하나의 교환에서만 사용된다. 웹 서버에서 소켓 통신 과정 1 - 웹서버는 서버 소켓 생성 서버 소켓 객체 생성 serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 소켓을 외부 세계에서 볼 수 있도록 gethostname() 사용 serversocket.bind((socket.gethostname(), 80)) 'localhost'를 사용하면 같은 기계 내에서만 소켓을 갖게 됨으로 주의하자. 낮은 포트의 번호 80은 잘 알려진 서비스인 HTTP, SNMP를 예약하기 위해서이다. listen은 외부 연결을 거부하기 전에 최대 5개의 연결 ..
네트워크 용어 정리 TCP/IP 네트워크상에 가장 널리 사용되는 프로토콜의 종류, 프로토콜은 네트워크상의 의사소통을 위한 약속이다. 호스트 이름 / 도메인 이름 호스트 이름은 각각의 컴퓨터에 지정된 이름을 말한다. 도메인은 인터넷에 연결된 컴퓨터를 사람이 쉽게 기억하고 입력 할 수 있도록 문자로 만든 인터넷 주소이다. 도메인 이름은 dongduk.ac.kr 와 같이 표기한다. IP 주소 각 컴퓨터의 네트워크 카드에 부여되는 고유한 주소 값. 즉, 네트워크에 연결된 모든 컴퓨터는 고유한 IP가 있어서 특정 컴퓨터의 IP를 알면 그 컴퓨터가 전 세계 어디에 있든지 접속할 수 있다는 개념이다. IP는 4바이트로 이루어져 있으며, 각 자리는 0 ~ 255까지의 숫자가 올 수 있다. 네트워크 주소 같은 네..